Часть 1 из 4
На прошлой неделе мы выпустили альфа- версию StarkDEX в общедоступной тестовой сети Ethereum, впервые продемонстрировав живую систему Layer-2 на основе STARK. В ближайшие недели мы выпустим серию сообщений в блогах, в которых мы подробно расскажем о технологии StarkDEX и объясним ее различные компоненты и механизмы.
В этом посте, первом из серии, мы дадим обзор нашей системы и обсудим пользовательские потоки и пакетную обработку. Следующие посты в этой серии будут посвящены нашему контракту и заявлениям, механизму масштабируемости STARK и дизайну алгебраического промежуточного представления (AIR) для DEX.
Погружение в StarkDEX Alpha
StarkDEX позволяет масштабировать децентрализованные биржи, снимая ограничение, установленное стоимостью расчета каждой транзакции в сети, как подробно обсуждалось в нашем предыдущем посте .
Важная экономия достигается за счет сокращения вычислений и операций хранения в цепочке. Для этого мы перемещаем данные вне цепочки. Основная идея состоит в том, чтобы хранить балансы с помощью дерева Меркла, где в цепочке хранится только корень этого дерева Меркла. Каждая операция в обмене преобразуется в преобразование листьев дерева Меркла. Затем мы доказываем контракту StarkDEX, что большая партия обменных операций действительна (средства не исчезают и не создаются из воздуха, каждая сделка имеет цифровую подпись обоих контрагентов и т. д.) и что эти операции согласуются с изменение корня Меркла.
Чтобы отслеживать балансы пользователей, мы вводим понятие хранилища . Хранилище представляет собой средства определенного токена, принадлежащие определенному пользователю. Например, одно хранилище может содержать 1 ETH, принадлежащий пользователю А, а второе хранилище может содержать 3 DAI того же пользователя. Каждому хранилищу присваивается уникальный 31-битный идентификатор, состоящий из трех полей: открытый ключ пользователя, тип токена и баланс для этого пользователя.
Все хранилища организованы в виде дерева Меркла . Корень этого дерева Меркла представляет собой полное состояние всех балансов в системе. Таким образом, достаточно хранить в цепочке только этот корень, а не полное дерево, и по-прежнему иметь возможность проверять заявления о любом балансе. Всякий раз, когда изменяются какие-либо балансы в хранилищах вне сети, единственное, что должно быть записано в сети, — это новый корень Merkle.
Основные потоки пользователей
Чтобы торговать на StarkDEX, пользователю сначала необходимо внести свои средства в контракт StarkDEX. Это делается с помощью простой транзакции Ethereum, инициированной пользователем, которая добавляет депозит пользователя в структуру данных, называемую «балансом депозита в цепочке». StarkDEX отслеживает эту структуру данных и перемещает депонированную сумму из нее в соответствующее автономное хранилище, соответственно вычисляя новый корень Merkle.
Как только средства будут записаны в автономном хранилище, пользователь сможет использовать их для торговли. Разные биржи могут использовать разные механизмы сопоставления для облегчения торговли, и эта часть является внешней по отношению к системе StarkDEX. Как только сделка должна быть урегулирована, средства четырех соответствующих хранилищ (одна сделка означает, что два трейдера модифицируют два актива каждый) обновляются, и соответственно вычисляется новый корень Меркла. Чтобы гарантировать, что эта операция будет выполнена с одобрения пользователей, им необходимо подписать заказы. В настоящее время StarkDEX работает по модели «мейкер-тейкер» — мейкер создает подписанный ордер, состоящий из типов токенов для торговли, сумм и двух идентификаторов их хранилищ. Чтобы сформировать сделку, тейкер подписывает хэш этого ордера и свои два идентификатора хранилища (частичное выполнение ордера не поддерживается в альфа-версии StarkDEX,В настоящее время StarkDEX работает по модели «мейкер-тейкер» — мейкер создает подписанный ордер, состоящий из типов токенов для торговли, сумм и двух идентификаторов их хранилищ. Чтобы сформировать сделку, тейкер подписывает хэш этого ордера и два собственных идентификатора хранилища (частичное выполнение ордера не поддерживается в альфа-версии StarkDEX, но будет добавлено в следующей версии).
Когда пользователь хочет использовать средства за пределами StarkDEX, он просит биржу вывести определенное количество токенов. Это приводит к уменьшению баланса соответствующего автономного хранилища (соответственно вычисление нового корня Меркла) и увеличению «баланса вывода средств в сети». Теперь пользователь может вывести средства прямо из контракта StarkDEX.
Обратите внимание, что общее количество токенов, которыми владеет пользователь, представляет собой сумму его хранилища вне сети и двух балансов в сети (депозит и вывод).
На протяжении всех этих потоков пользователь всегда сохраняет свои средства на хранение — они не могут быть перемещены на другой адрес без явной подписи пользователя. В обычных условиях обмен необходим пользователю для вывода средств. Это может быть проблематично, если биржа скомпрометирована, так как средства пользователя могут быть заблокированы в системе (но учтите, что даже в этом неудачном сценарии средства не могут быть украдены). Чтобы пользователь мог вывести свои средства даже в этом крайнем случае, мы вводим механизм «аварийного люка» (не поддерживается в альфа-версии StarkDEX, но будет добавлен в следующей версии). Чтобы активировать этот механизм, пользователь вызывает «полный вывод» контракта StarkDEX. Это вынуждает систему StarkDEX высвобождать средства (на баланс вывода в сети, откуда пользователь может вывести средства) в течение определенного периода времени. Если система не может этого сделать, контракт замораживается — любые будущие расчеты будут отклонены, что приведет к замораживанию дерева Меркла хранилища вне сети. С этого момента пользователь может напрямую отказаться от контракта, подтвердив путь аутентификации Merkle своего автономного хранилища.
Дозирование
Доказательства STARK обеспечивают недорогую проверку сложных операций, которые были выполнены вне сети. Чтобы максимизировать выгоду от этого механизма, система StarkDEX объединяет большое количество транзакций в одно доказательство. Поскольку стоимость проверки доказательства STARK почти не зависит от размера пакета, это обеспечивает убедительную экономию за счет масштаба: чем выше пропускная способность, тем ниже стоимость газа для одной транзакции, что обеспечивает почти неограниченную пропускную способность, несмотря на ограничение газа Ethereum.
Каждое доказательство StarkDEX содержит большое количество транзакций трех разных типов:
- Торговый расчет.
- Депозит — перемещение средств с депозитного баланса в сети в хранилище вне сети.
- Снятие — перемещение средств из хранилища вне сети на баланс вывода в сети.
Причина, по которой StarkDEX использует балансы в сети в дополнение к хранилищам вне сети, заключается в том, что только пользователь может перемещать средства из своего кошелька, и эти средства изначально переводятся с использованием обычной транзакции Ethereum, которая не может изменить данные вне сети. Как только средства находятся в контракте, система StarkDEX может перевести их вне сети.
На этом мы завершаем наш обзор StarkDEX. В следующем сообщении блога мы более подробно опишем наши контракты и заявления. Если у вас есть какие-либо вопросы или предложения, оставьте комментарий здесь или напишите нам в Твиттере @StarkWareLtd .
Лиор Голдберг и Орен Кац
StarkWare