# Вступление

ZKSwap - это протокол обмена токенами, основанный на Автоматизированном Маркет-Мейкере (AMM). Благодаря технологии ZK-Rollup полный набор функций Uniswap реализован на уровне 2, обеспечивая при этом неограниченную масштабируемость и конфиденциальность. ZKSwap **предлагает своп-инфраструктуру и транзакции со сверхвысокой пропускной способностью и нулевыми сборами за газ для поставщиков ликвидности и трейдеров.**

## Особенности ZKSwap

На данный момент большинство децентрализованных бирж DEX, таких как Uniswap, отличаются от централизованных бирж, таких как Huobi и OKEx, включением автоматизированных маркет-мейкеров и заменой ручных котировок установленными алгоритмами. Децентрализованная биржа может устранить централизованное сопоставление и очистку, устраняя при этом маркет-мейкера в транзакции. Таким образом, они могут предоставлять пользователям высокозащищенные и конфиденциальные транзакции.

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

Но ZKSwap реализует логику обмена традиционными децентрализованными биржами на уровне 2 с помощью технологии ZK-Rollups, так что все обмены завершаются на уровне 2, снижая транзакционные издержки пользователя и обеспечивая общий опыт транзакций. По сравнению с традиционным DEX, ZKSwap обладает следующими преимуществами:

**0 Gas Fee:** Вместо получения платы за газ от транзакций на традиционном Dex (плата за газ будет продолжать увеличиваться по мере роста цен на Ethereum), транзакции ZKSwap на уровне 2 требуют нулевой платы за газ, что значительно снижает транзакционные издержки для пользователей.

**Высокий TPS (транзакция в секунду):** Из-за ограничений TPS на Ethereum традиционный Dex, такой как Uniswap, имеет очевидное узкое место в количестве транзакций и пропускной способности в секунду. Благодаря оптимизации GPU ZKSwap может проводить сотни и тысячи TPS с помощью надежного метода. При наличии достаточного количества машин для поддержки расширения, TPS ZKSwap теоретически может достигать 6000.

**Real-time транзакция:** Все транзакции на ZKSwap переносятся на уровень 2 и действительны для транзакций в реальном времени, пользователям НЕ нужно ждать времени подтверждения блока.<br>


# Определения

## 1.Определения

**L1: Сокращение от Layer-1**, обычно рассматриваемого как основная цепочка Ethereum.

**L2: Сокращение от Layer-2**, это решение для расширения емкости, основанное на основной цепочке Ethereum.

**L2 deposit:** Перевод токенов со счета уровня 1 на счет уровня 2 ZKSwap.

**L2 Withdrawal:** Вывод токенов со счета уровня 2 и отправка их на счет уровня 1.

**L2 transfer:** Перевод токенов на уровне 2 без платы за газ.

**TPS:** Количество транзакций, которые могут быть обработаны за секунду.

**ZKSwap:** Протокол обмена токенами на уровне 2, основанный на ZK-Rollups.

**ZK-Rollups:** ZK-Rollups - это популярное решение для масштабирования уровня 2. Его основная идея заключается в масштабировании сети путем объединения нескольких транзакций и проверки доказательств по цепочке. ZK-Rollups анализирует и проверяет эти агрегированные транзакции с помощью смарт-контрактов и использует технологию доказательства с нулевым разглашением для размещения доказательств агрегированных транзакций в цепочке, тем самым уменьшая объем данных, которые необходимо хранить в цепочке. Все средства заблокированы в смарт-контракте, и большая часть расчетов и хранения выполняется вне цепочки.

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

**Uniswap:** это автоматизированный протокол ликвидности, основанный на постоянной формуле продукта и реализованный в системе необновляемых смарт-контрактов на блокчейне Ethereum. Пользователи могут создать пул ликвидности, предоставив определенный процент ETH и любой другой актив ERC20. Один пул ликвидности резервирует токены ERC20 и обеспечивает ликвидность для транзакций между этими двумя активами. В свою очередь, все поставщики ликвидности разделят 0,3% от объема транзакции в качестве платы за предоставление ликвидности. В Uniswap первый поставщик ликвидности должен установить соотношение двух активов в пуле ликвидности. Автоматизированный алгоритм маркет-мейкера гарантирует, что продукт двух активов до и после каждой транзакции остается постоянным.

**Create a Liquidity Pool:** В Uniswap каждая торговая пара имеет только один пул ликвидности, который, как правило, создается первым поставщиком ликвидности. Например, поставщик ликвидности создает пул ликвидности ETH-ZKS, а затем добавляет ликвидность. Начальное количество введенных ETH равно x0, количество хранимых ZKS равно y0, а x0 ∗ y0 = c0. Здесь ZKS может быть любым токеном ERC-20.

**Liquidity Token:** Поставщик ликвидности (далее именуемый LP) получит Токен Поставщика Ликвидности (далее именуемый Токеном LP или LT), который используется для представления доли LP в текущем пуле ликвидности. Токен LP - это токен ERC-20, который может быть передан без удаления ликвидности из пула ликвидности. Каждый пул ликвидности имеет соответствующий токен LP.

**Create Liquidity:** При добавлении ликвидности в существующий пул пользователи должны добавлять парные токены, пропорциональные текущему коэффициенту.

**Remove Liquidity:** поставщики ликвидности могут удалить ликвидность, включив свой токен LP в контракт пула ликвидности и получив соответствующие доли двух токенов из пула.

**Swap:** После создания пула ликвидности и ввода ликвидности пользователи, владеющие ETH или ZKS, могут начать обмен в пуле ликвидности.

## 2.Введение в Концепцию Уровня 2

Приложения DeFi и NFT на Ethereum предоставляют рынку многочисленные возможности для получения дохода, но по мере роста затрат отрасль начала обращать свое внимание на розничных инвесторов. По мере того как проекты DeFi становятся все более активными, нагрузка на современные протоколы очень ограничена. Поэтому появилось много протоколов уровня 2. Основная цель этих протоколов - сократить количество транзакций в блокчейне Ethereum за счет переноса транзакционных операций в другие места, при этом все еще используя основную цепочку в качестве гарантии безопасности. Например, **state channels, sidechains, Plasma и Rollup.** Основная идея всех решений уровня 2 заключается в том, чтобы позволить нескольким участникам каким-либо образом безопасно взаимодействовать без необходимости публиковать транзакции в основной цепочке (т.е. Уровень 1), но в определенной степени сеть Ethereum по-прежнему используется в качестве арбитража для обеспечения безопасности. Различные решения уровня 2 имеют различные характеристики, преимущества и недостатки.

В следующих статьях подробно рассматриваются текущие основные решения для масштабирования Ethereum уровня 2.

​[Понимание решений масштабирования уровня 2 Ethereum: State Channels, Plasma и Truebit​](https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4)

[​Обзор подходов уровня 2: Plasma, State Channels, Side Chains, Roll Ups](https://nearprotocol.com/blog/layer-2/)

[​Optimistic против ZK Rollup: Глубокое погружение](https://medium.com/matter-labs/optimistic-vs-zk-rollup-deep-dive-ea141e71e075)


# Правила Торговли ZKSwap

## Кошелек L2:

**Deposit:** Позволяет произвести депозит со своего кошелька Layer1 или депозит с других счетов Layer2. ZKSwap не взимает никаких комиссий за внесение депозита.&#x20;

**Send:** Позволяет перевести на кошельки Layer2 с любого адреса ERC20. Доступно 50 бесплатных переводов в день (UTC с 0:00 до 0:00 следующего дня), после чего ZKSwap будет взимать токены перевода, эквивалентные 2 UST, в качестве платы за обработку.&#x20;

**Withdraw:** По умолчанию вывод активов на свой кошелек Layer1, также вы можете выводить активы на любой адрес ERC20. Если вы выводите ETH на адрес биржи, пожалуйста, убедитесь, что он поддерживает тип транзакции (внутренняя транзакция), переданной из контракта. ZKSwap будет взимать эквивалентные токены в размере $5 в качестве платы платформы при выводе любого токена.&#x20;

**Total Value Locked:** Включает сведения об активах L2 и Сведения о пуле L2.

**L2 Assets Details:** ZKS сначала сортирует по умолчанию, другие токены отображают количество и стоимость в порядке убывания стоимости активов в кошельке (по цене в USDT).

**L2 Pool Details:** В соответствии со стоимостью различных токенов LP в кошельке (по цене в USDT) количество и стоимость отображаются в порядке убывания.

## **L2 Swap:**

**Liquidity:** Величина ликвидности пула.

**Price:** текущая цена токена/USDT.

**Slippage Tolerance:** Из-за ограниченной глубины пула ликвидности, своп, добавление ликвидности или удаление ликвидности повлияют на текущую цену. Ваша транзакция будет отменена, если цена изменится более чем на этот процент.

**Est. Deal Price:** Из-за ограниченного объема пула, обмен, добавление или удаление ликвидности влияют на текущую цену, в результате чего цена сделки отклоняется от текущей цены.

**Price Impact:** Из-за ограниченного объема пула, биржа повлияет на текущую цену. Ожидаемое колебание цены - это процентная разница между текущей ценой и ценой сделки.

**Transaction Fee:** ZKSwap взимает 0,3% от всех транзакций свопа Layer2 в качестве комиссии за транзакцию.Среди них 0,25% будет автоматически выделено поставщику ликвидности, а остальные 0,05% будут использоваться в качестве платы комиссии протокола. Все протокольные сборы (100%) будут использоваться в качестве долгосрочного стимулирования проекта, и официальные представители ZKSwap не будут получать никакие транзакционные комиссии.

**Input:** Пожалуйста, введите количество токенов, которые вы готовы заплатить, чтобы обменять на соответствующие токены.

**Minimum Received:** Минимальная сумма, которую вы получите после отправки свопа. Сделка будет отменена, если перед вашей отправкой произойдет большое неблагоприятное движение цены.

**Slippage Setting:** Можно установить проскальзывание.

**Status:** Отправлено/Сделка/Успех

**Status Description:** “Отправлено“ означает, что транзакция была отправлена в сеть Layer2. “Сделка” означает, что изменение суммы, относящейся к сети Layer2, возможно, вступило в силу. “Успех“ означает, что транзакция прошла проверку ZK-proof и была отправлена в сеть Ethereum Layer1.

**Minimum Amount to be Exchanged:** После подтверждения обмена стоимость токена, который вы получите, должна быть больше 10 USDT, в противном случае обмен не может быть произведен.

## **L2 Pool**:

**Add/Withdraw Liquidity:** Существует ограничение в размере 50 бесплатных добавлений/выводов ликвидности в день (UTC с 0:00 до 0:00 следующего дня), после чего ZKSwap взимает плату за обработку в размере $1 за каждый из двух токенов, участвующих в ликвидности.

**Minimum Quantity Allowed to Add/Withdraw Liquidity:** Стоимость наименьшего токена LP, который вы получаете после добавления ликвидности (в USDT), или сумма стоимости как минимум двух токенов (в USDT), которые вы получаете после вывода ликвидности, должна превышать 10 USDT, в противном случае вы не сможете добавить/вывести ликвидность.<br>

## **Майнинг:**

**Proof-of-Gas Mining:** ZKSwap будет выводить ETH из пула фондов, участвующих в добыче PoG, в произвольное время каждый день в соответствии со стоимостью газа, потребляемой ZKSwap, потреблять ETH пользователя в соответствии с долей внесенных ETH пользователя в пуле фондов и генерировать призовой фонд ZKS в течение дня в соответствии с официальным значением ETH\*125%. Затем Приз будет распределен среди пользователей пропорционально.

**Deposit ETH for PoG:**: Только ETH в кошельке Layer1 можно внести на адрес смарт-контракта для майнинга.

**Withdraw to Wallet:** Вывод основной суммы (ETH) или вознаграждения (ZKS) из смарт-контракта на кошелек Layer1.

**PoG Reward Balance:** Ежедневные вознаграждения за добычу газа будут накапливаться в балансе вознаграждений. После каждого депозита ETH для баланса вознаграждения будет действовать 24-часовой период блокировки, после чего вознаграждение может быть снято в любое время.

**Proof-of-Staking Mining:** Если ваш ZKS находится в кошельке Layer2, пожалуйста, выведите его на кошелек уровня 1 перед участием в PoS-мероприятии. Пожалуйста, обратите внимание, что вы не сможете вернуть сделанные ставки ZKS до окончания PoS-мероприятия.

**Proof-of-Liquidity Mining:** поставщики ликвидности ZKSwap могут автоматически участвовать в майнинге ликвидности, разделяя призовой фонд ZKS в соответствии с соотношением предоставленной стоимости ликвидности к стоимости ликвидности пар ZKSwap Layer2, награды за майнинг будут распределяться на ваш счет кошелька L2 каждый день.

**Proof-of-Transfer:** Если вы участвуете в L2 обмене транзакционных пар, вы можете разделить вознаграждение за майнинг в соответствии с суммой обмена, и вознаграждение будет автоматически распределяться на ваш счет кошелька L2 каждый день. Общая награда за ежедневный майнинг составляет эквивалент ZKS от ежедневной комиссии за транзакцию пары\*90%. Чтобы предотвратить злонамеренный скальпинг, одна пара имеет дневной верхний предел 2000/1000.<br>


# Управление

Статьи раздела:

{% content-ref url="/pages/-MhRg0aC5fEjf8SMGiSd" %}
[Политика Управления Сообществом](/upravlenie/politika-upravleniya-soobshestvom)
{% endcontent-ref %}

{% content-ref url="/pages/-MhRg-lb\_LusZjv-LmOH" %}
[Требования к Предложению и Шаблон](/upravlenie/trebovaniya-k-predlozheniyu-i-shablon)
{% endcontent-ref %}


# Политика Управления Сообществом

## Структура управления：

Управление сообществом состоит из трех частей：

* **Portals**:

  &#x20;Вы можете получить доступ к подробной информации на странице управления сообществом Вики через официальный веб-сайт, приложение и веб-браузер.
* **Forum**:

  &#x20;На форуме пользователи могут обсудить содержание предложения, результаты предложения и детали реализации.
* **snapshot platform**:

  &#x20;пользователи будут использовать инструмент управления Snapshot для публикации предложений и голосования.

## Права и интересы gZKS：

**Права gZKS：**

1\. Пользователи могут участвовать в управлении сообществом с помощью gZKS, включая право предлагать и голосовать.

2\. Пользователи с 50,000 или более gZKS могут инициировать предложения.

3\. Порог для участия в голосовании отсутствует, и голоса подсчитываются по количеству gZKS, при этом для одного голоса требуется минимум 1 gZKS.<br>

**Правила генерации gZKS:** gZKS генерируется на основе 360-дневного Proof-of-Staking контракта ZKS. Вы можете получить gZKS только в том случае, если оставшееся время подтверждения ставки по 360-дневному контракту на блокировку превышает или равно 180 дням. Когда оставшееся время существующей 360-дневной деятельности по майнингу PoS составит менее 180 дней, команда ZKSwap откроет новый 360-дневный PoS-контракт. К тому времени пользователи смогут заблокировать ZKS в новом 360-дневном PoS-контракте, чтобы получить gZKS.<br>

**Правила выдачи gZKS:** Пользователи, участвующие в 360-дневном PoS-майнинге ZKS, будут еженедельно получать соответствующее количество gZKS по адресу L2. Количество полученных gZKS определяется количеством и временем фактически заблокированных ZKS пользователя. Пользователи, которые заблокировали ZKS на 360 дней, могут получить одинаковое количество gZKS для заблокированных ZKS, которое будет линейно уменьшаться с фактическим временем PoS до половины суммы gZKS (половину суммы gZKS можно получить после 180 дней блокировки, но не менее чем на 180 дней. Чтобы получить gZKS, вам необходимо принять участие в новой 360-дневной PoS-операции и майнинге).<br>

Например: когда до истечения 360-дневного PoS-контракта остается 270 дней, если пользователь решит заблокировать 100 ZKS, соответствующие 75 gZKS могут быть получены в учетной записи L2.<br>

**Срок годности gZKS:** Действительный срок действия gZKS, сгенерированных по существующему PoS-контракту ZKS на 360 дней, составляет 720 дней.

## Процесс управления：

**1.Обсуждение в сообществе:** Пользователи могут публиковать сообщения, связанные с управлением сообществом, в соответствующем разделе форума для обсуждения и размещения предварительных идей и мнений по предложению.

Ссылка на форум: [https://forum.zks.org​](https://forum.zks.org)

**2.Инициирование предложения:** Инициатору необходимо указать 50,000 gZKS на Snapshot, чтобы инициировать предложение.

**3.Обзор на странице управления Snapshot ZKSwap:** мы опубликуем ссылки на страницу Snapshot на форуме ZKSwap, как только gZKS будут выпущены.

Ссылка на управление в Snapshot: [https://snapshot.org/#/gzks.eth​](https://snapshot.org/#/gzks.eth)

**4.Голосование:** Любой владелец gZKS может проголосовать на странице голосования за предложение в Snapshot. Процесс осуществляется по цепочке, чтобы обеспечить открытость и прозрачность.

**5.Объявление результатов:** Администраторы форума ZKSwap опубликуют результаты действительных предложений в соответствующих разделах форума и синхронизируют план реализации и прогресс.

## Предложения：

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

**1.Token Listing:** Заявитель может предложить официально запустить любой токен ERC20 или торговую пару на ZKSwap. После принятия ZKSwap завершит листинг или добавит торговые пары в течение 7 дней после принятия предложения.

Условия пропуска: 500 тысяч gZKS

**2.Airdrop:** Заявители могут предлагать раздачи любому пользователю проекта DEFI с определенными правилами. После принятия ZKSwap отправит определенное количество ZKS на адреса уровней 2 соответствующие требованиям пользователей, чтобы стимулировать пользователей использовать ZKSwap. Размер субсидии определяется газом в цепочке ETH во время раздачи (субсидии на сборы за депозит).

Условия прохождения: 1 миллион gZKS

**3.Активность майнинга ликвидности:** Участники могут предложить начать деятельность по добыче ликвидности активов по любой валютной паре. После прохождения ZKSwap добавит валютную пару в следующую деятельность по добыче ликвидности, и вознаграждение за добычу будет определяться на основе среднего дохода от добычи ликвидности платформы.

Условия прохождения: 1 миллион gZKS

**4.Изменение правил управления:** Авторы предложений также могут предложить внести поправки для корректировки политики управления сообществом и порога одобрения. ZKSwap оперативно внесет изменения в правила управления сообществом.

Условия прохождения: 3 миллиона gZKS

**5.Корректировка параметров, таких как комиссионные ставки:** Участники могут предложить изменить параметры комиссионных ставок, установленные платформой, такие как комиссия за ликвидность, которую необходимо предоставить для обмена, комиссия за вывод средств, ежедневные бесплатные переводы, количество раз, когда можно бесплатно удалить/добавить ликвидность, и сумма, взимаемая после достижения свободных лимитов, и т.д. После прохождения ZKSwap оптимизирует соответствующие показатели на следующей итерации.

Условия прохождения: 5 миллионов gZKS

**6.Изменение параметров экономической модели:** Разработчики могут предложить изменить экономическую модель выпуска токенов ZKS, включая, но не ограничиваясь различными типами распределения добычи, сокращением объема производства вдвое с течением времени, а также выкупом и уничтожением ZKS с оплатой за обработку. После прохождения ZKSwap внесет соответствующие коррективы в следующую версию или событие, сообщив о прогрессе.

Условия прохождения: 10 миллионов gZKS

**7.Будущая техническая дорожная карта:** Пользователи могут предложить будущую разработку технического маршрута и изменить техническую дорожную карту ZKSwap, включая, но не ограничиваясь запуском и выпуском NFT, поддержкой кросс-цепей Layer2, поддержкой EVM и расширением экосистемы Layer2 и т. Д. После прохождения команда ZKSwap скорректирует технический маршрут и своевременно инвестирует в исследования и разработки, а также будет регулярно публиковать информацию о достигнутом прогрессе.

Условия прохождения: 10 миллионов gZKS


# Требования к Предложению и Шаблон

**Все предложения по улучшению ZKSwap должны соответствовать основным принципам шаблона:**

## **1.Требование к Предложению：**

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

2\. Начните предложение с краткого резюме или основных пунктов.

3: Предоставьте объяснение: Четко опишите, что будет реализовано, если предложение будет выполнено.

4: Укажите мотивацию: Причину вашего предложения.

5: Добавьте технические характеристики: При необходимости предоставьте дополнительные пояснения.

6\. Расскажите о плюсах и минусах вашего предложения.

7: Возможность включить опрос для голосования.<br>

Пожалуйста, внимательно рассмотрите ваше предложение перед размещением на нашем [форуме](https://forum.zks.org/), спасибо!<br>

## **2.Шаблон Предложения：**

**Title：**

**Summary：**

**Explanation：**

**Motivation：**

**Specifications：**

**Pros：**

**Cons：**

**Poll：**<br>


# ЧаВо

## 1. Почему ZKSwap разрабатывает Uniswap на уровне 2？

С 2019 года индустрия блокчейна претерпела невероятные изменения. Децентрализованные финансы(DeFi) продолжают расти экспоненциальными темпами. Общая стоимость, зафиксированная в различных протоколах DeFi, превысила 70 миллиардов долларов США. В связи с непрерывным развитием многочисленных on-chain активов и off-chain активов, идущих on-chain, мы считаем, что общая стоимость, зафиксированная в протоколах DeFi, скоро превысит 100 миллиардов долларов США. Эти on-chain активы требуют быстрых, гладких и свободных услуг обмена в режиме реального времени, что привело к появлению новых протоколов децентрализованного обмена(DEX), таких как Uniswap.

Хотя новая модель DEX, возглавляемая Uniswap, достигла значительного развития, она все еще имеет очевидные недостатки. Во-первых, высокая плата за газ в десятки долларов за транзакцию препятствует входу новых пользователей; во-вторых, каждая транзакция и каждое выполнение должны ждать подтверждения по крайней мере одного блока, что дает неудовлетворительный опыт; и в-третьих, при условии ограничения TPS Ethereum, Uniswap имеет явное узкое место в количестве транзакций и пропускной способности транзакций в секунду. Эти недостатки не являются уникальными для Uniswap. Это общие проблемы, с которыми сталкиваются все DEX’ы.

ZKSwap (протокол обмена токенами на основе ZK-Rollups) - это совершенно новый протокол обмена, основанный на технологии ZK-Rollups. Благодаря технологии ZK-Rollups все токены ERC20 передаются через Layer2, и согласованное состояние Layer1 и Layer2 гарантируется на основе непрерывно генерируемых доказательств с нулевым разглашением. Это решение позволяет выполнять все транзакции и свопы на уровне 2, обеспечивая своп в реальном времени с нулевой платой за газ, неограниченной масштабируемостью, устраняя TPS ограничения Ethereum. Пользователю больше не нужно ждать подтверждения в один блок для каждой транзакции. ZKSwap позволяет DEX обеспечивать плавный пользовательский интерфейс централизованной биржи(CEX), позволяя пользователям полностью распоряжаться своими средствами. Мы считаем, что ZKSwap - это перспективная форма торговой платформы для токенов. Она вызовет значительную эволюцию всех существующих DEX и CEX.

## 2. Преимущества Zkswap по сравнению с Uniswap

Хотя новый Dex, такой как Uniswap, добился значительного прогресса, остается значительное количество недостатков. ZKSwap имеет следующие преимущества по сравнению с Uniswap:

**Нулевая плата за газ:** По сравнению с платой за газ в десятки долларов, полученной в результате транзакций на традиционном Dex (плата за газ будет продолжать расти по мере роста цены Ethereum), для транзакций ZKSwap на уровне 2 требуется нулевая плата за газ, что значительно снижает транзакционные издержки для пользователей.

**Высокий TPS (транзакция в секунду):** Из-за ограничений TPS на Ethereum традиционный Dex, такой как Uniswap, имеет очевидное узкое место в количестве транзакций и пропускной способности в секунду. Благодаря оптимизации GPU ZKSwap может проводить сотни и тысячи TPS с помощью надежного метода. В случае наличия достаточного количества машин для поддержки расширения, TPS ZKSwap теоретически может достигать 6000.

**Транзакция в режиме реального времени:** Все транзакции на ZKSwap переносятся на уровень 2 и действительны для транзакций в режиме реального времени, пользователям НЕ нужно ждать подтверждения в один блок.

## 3. Различие между ZKSwap и централизованной биржей (CEX)

Централизованная криптобиржа, представленная такими биржами, как Binance, Huobi, OKEx и др., собрала огромное количество пользователей и транзакций. Основные различия между ZKSwap и централизованными биржами заключаются в следующем:

**С точки зрения безопасности активов,** кошелек CEX хранит активы и управляет активами у всех пользователей. Из-за большого количества средств легко привлечь хакеров. Как только возникнет проблема, почти все пользователи понесут убытки; в ZKSwap активы пользователей не хранятся на платформе, а управляются смарт-контрактами. Во время транзакции платформа не прикасается к активам пользователя. Для каждой транзакции требуется, чтобы пользователи заполнили подтверждение подписью закрытого ключа, и обмен активами напрямую передается на кошелек учетной записи L2.

**С точки зрения контроля активов,** в CEX активы пользователей контролируются платформой, и пользователям необходимо перевести свои активы на кошелек торговой платформы. Функция хранения активов централизованной торговой платформы аналогична функции банка. Пользователь вносит деньги в банк, и банк предоставляет пользователю учетную запись для учета средств пользователя. Банк имеет абсолютный контроль над средствами пользователя; на ZKSwap активы полностью находятся под контролем пользователя. ZKSwap не предоставляет услуги по хранению средств, поэтому он не может контролировать или переводить средства пользователей. Как децентрализованная биржа уровня 2, ZKSwap прошла аудит безопасности трех основных аудиторских учреждений (ABDK, Certik и SlowMist) для своих контрактов и кодов схем. Пользователи управляют своими собственными закрытыми ключами, а их активы находятся в безопасности и управляются самими пользователями.

**В процессе регистрации в CEX** пользователи регистрируются для учетной записи и устанавливают пароль для входа на биржу. Этот процесс, как правило, требует KYC. Для рассмотрения необходимо представить соответствующие материалы. На ZKSwap пользователи могут использовать ZKSwap без KYC, подключив кошелек Ethereum к платформе ZKSwap, что делает процесс более быстрым и удобным.

**В процессе транзакции,** транзакции CEX завершаются путем сопоставления биржевого стакана; ZKSwap использует автоматическую модель AMM маркет-мейкера, которая имеет очевидные преимущества в эффективности использования активов пользователей и глубине транзакций. Процесс транзакции выполняется смарт-контрактом, без какой-либо третьей стороны, выступающей в качестве посредника.

## 4. Куда доверены средства пользователя?

Активы пользователя в ZKSwap уровня 2 доверены в смарт-контракте и полностью находятся под их собственным контролем. За исключением пользователя, которому принадлежит закрытый ключ учетной записи, другие третьи стороны не могут контролировать или передавать активы пользователя. Даже если команда проекта остановит сервис, пользователи все равно смогут извлекать активы автономно из смарт-контракта.

## 5. Различие между протоколом ZKSwap и Loopring

Основное различие между ZKSwap и Loopring заключается в областях маршрута продукта, технических деталях и пользовательском опыте.

**С точки зрения дизайна продукта,** Loopring - это DEX уровня 2, основанный на модели биржевого стакана, и он также начал изучать DEX уровня 2, основанный на модели AMM. ZKSwap в основном фокусируется на DEX уровня 2 на основе модели AMM и надеется построить больше инфраструктуры уровня 2 в будущем.

**С точки зрения технических деталей,** Loopring использует Groth16 алгоритм доказательства с нулевым разглашением, и схему необходимо сбрасывать каждый раз при запуске торговой пары. ZKSwap основан на более новом алгоритме доказательства нулевого знания Plonk, который является более эффективным и способным обновлять надежные настройки без необходимости обновлять схему каждый раз.

В целом, уровень 2 - это путь с большими возможностями, а проектов уровня 2 слишком мало. Мы верим, что в будущем все больше и больше проектов войдут в это русло и привнесут больше инноваций и разнообразия в экосистему. ZKSwap надеется создать полную экосистему уровня 2 вместе с этими проектами.

## 6. Как торговать на ZKSwap

После того, как пользователь подключит кошелек к zks.app, внесет средства на счет второго уровня ZKSwap, он сможет начать торговлю. Для получения информации о конкретном процессе транзакции, пожалуйста, перейдите к: [Руководство по использованию веб-приложения ZKSwap​](https://zks.app/docs/tutorial-en.pdf)<br>

## 7. Почему переводы L2 не могут быть произведены напрямую на адрес биржи(Binance, Huobi и т.д.)?

Поскольку в настоящее время биржа не поддерживает перевод ZKSwap уровня 2, пользователям не следует использовать функцию перевода L-2 для перевода средств на адрес биржи. В будущем мы будем стремиться к сотрудничеству по переводу L2 с биржей и поддерживать пользователей в передаче токенов ERC20 на адрес биржи в режиме реального времени через ZKSwap с 0 комиссией за газ.

## 8. Может ли вывод средств ZKSwap быть быстрее?

Недавнее обновление системы ZKSwap Layer2 оптимизировало функцию вывода средств ZKSwap. Время вывода средств со уровня 2 на уровень 1, обрабатываемое смарт-контрактом на ZKSwap, будет напрямую сокращено с 30-60 минут до 20-40 минут. В будущем мы продолжим оптимизировать технологии и итеративные продукты, чтобы обеспечить лучший сервис и удобство для пользователей ZKSwap.

## 9. Почему существует минимальное требование к балансу счета перед тем, как можно будет осуществить перевод и обмен L2?

Так как переводы и транзакции L2 на ZKSwap должны генерировать доказательства с нулевым разглашением и отправлять их на уровень 1 для обеспечения безопасности активов, а процесс передачи данных по цепочке будет генерировать определенную сумму сборов за газ. Чтобы ограничить увеличение операционных расходов ZKSwap, вызванное вредоносными атаками, мы ограничиваем минимальный баланс учетной записи, чтобы снизить риск атаки. Поэтому пользователям необходимо внести не менее 50 ZKS или эквивалент 200 токенов usdt на учетную запись L2 перед выполнением операций L2.

## 10. Почему ZKSwap выбрал технический маршрут ZK-Rollups?

После долгих исследований и тестирования команда проекта ZKSwap пришла к выводу, что ZK-Rollups - лучший вариант для масштабирования ETH. ZK-Rollups использует популярную идею расширения Rollups для реализации расширения уровня 2. В то же время ZK-Rollup использует технологию доказательства с нулевым разглашением для загрузки доказательств расчетов на уровне 2 в режиме реального времени, обеспечивая почти такой же уровень безопасности, как в сети Ethereum уровня 1.

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

## 11. Каков текущий TPS ZKSwap? Как добиться масштабируемости? Почему говорится, что из-за общего консенсуса Ethereum, тратя больше денег, нельзя увеличить TPS?

По сравнению с 10-20 TPS Ethereum, текущий TPS ZKSwap составляет около 100 транзакций за 15 секунд, и теоретически TPS может достигать более 6000. Поскольку все транзакции происходят на уровне 2, ZKSwap обладает неограниченной масштабируемостью. В будущем ZKSwap сосредоточится на следующих областях для улучшения масштабируемости:

1. **Расширение большого количества узлов проверки**
2. **Увеличение значений фрагмента каждого блока, чтобы увеличить количество быстро упакованных транзакций**
3. **Оптимизация цепочного дизайна, оптимизация GPU**

Консенсус Ethereum имеет ограничения по пропускной способности, и пропускная способность зависит от размера блока и времени блокировки. Чем больше блок, тем короче время блока и тем выше пропускная способность. Однако большие блоки не способствуют децентрализации узлов, а сокращение времени блокировки увеличит вероятность разветвления цепочки. Простое увеличение размера блока или сокращение времени между поколениями блоков не может решить проблему, поскольку блоку требуется время для передачи и проверки. Если блок слишком велик, это приведет к увеличению несогласованности узлов сети (больше развилок) , что серьезно влияет на безопасность.

## 12. Как добавить токены в листинг на ZKSwap?

В будущем ZKSwap откроет управление сообществом. Сообщество может предложить инициировать заявку на листинг токенов. Пользователи, участвующие в долгосрочной деятельности ZKS по добыче PoS, могут проголосовать за предложение о листинге токенов с помощью gZKS, полученных в результате деятельности по добыче PoS.

## 13. Как работает учетная запись ZKSwap L2?

В настоящее время продукты ZKSwap включают в себя: кошелек layer2 и протокол обмена AMM Layer2. Кошелек используется для хранения и использования активов 2-го уровня пользователя, в то время как протокол AMM используется для проведения свопов и транзакций. Это похоже на функцию кошелька + транзакции традиционной централизованной биржи. Кошелек уровня 2 и протокол обмена AMM уровня 2 необходимы для завершения полного процесса транзакций уровня 2.

## 14. Как перевести ETH и ERC20 через ZKSwap через кошелек web3?

В настоящее время ZKSwap поддерживает кошельки Metamask, imToken, TokenPocket и Bitpie для передачи токенов ETH и ERC20 через ZKSwap, и пользователям не нужно платить никаких сборов за газ. Пожалуйста, скачайте кошелек и настройте соединение. В будущем ZKSwap продолжит увеличивать количество кошельков, которые смогут подключить пользователи. Смотрите конкретный учебник по ZKSwap:

​[Руководство по использованию риложения ZKSwap в Основной Сети Ethereum​](https://zks.app/docs/tutorial-en.pdf)

## 15. Как работает система ZKSwap?

Система ZKSwap состоит из встроенных смарт-контрактов, автономного сервера ZKSwap, системы проверки с нулевым разглашением и внешнего пользовательского интерфейса.

​​[Архитектура системы ZKSwap​​](https://camo.githubusercontent.com/382e0300454ee87ac98872abb3a2bfdfd86d6d7cca75a0310e1235ebd5b0ec42/68747470733a2f2f7a6b732e6f72672f696d616765732f626c6f672f31312f312e706e67)

**ZKSwap Smart Contract**

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

**ZKSwap Layer 2 Server**

Сервер ZKSwap - это модуль, который обрабатывает все транзакции вне цепочки. Сервер ZKSwap может использовать WebSocket для взаимодействия с пользователем и мониторинга транзакций в блокчейне Ethereum. Все действительные запросы на транзакции будут помещены в mem пул ZKSwap и обработаны механизмом обмена. Типы транзакций в mem пуле совпадают с типами транзакций Uniswap. Разработчик блока свернет транзакции и сгенерирует новый блок. Хранитель состояния обновит статус всех токенов на уровне 2. Хранитель состояния отправит состояние Commiter’у, который отвечает за связь с сервером доказательств, получит подтверждение соответствующей транзакции и, наконец, отправит состояние и соответствующее доказательство SNARK через отправителя Ethereum в цепочку смарт-контрактов ZKSwap.

**Plonk Zero-knowledge Proof System**

Система доказательства с нулевым разглашением ZKSwap использует распределенную архитектуру и использует новейший алгоритм доказательства с нулевым разглашением PLONK для создания доказательств. Сервер Prove поддерживает несколько проверяющих. Несколько проверяющих активно запрашивают задачи проверки на сервере проверки и отправляют их обратно на сервер проверки после создания доказательства. Настройку глобального доверия PLONK необходимо создать только один раз, и схема может быть значительно использована повторно в определенном диапазоне, снижая порог для использования доказательств с нулевым разглашением.

**Дерево состояний ZKSwap**

В дереве состояний системы ZKSwap записывается баланс всех счетов в текущей системе. Дерево состояний ZKSwap - это дерево Меркла высотой 34. Дочерними узлами корневого узла являются все узлы учетной записи (24 уровня) в системе. Существует два типа узлов учетных записей:

* Узел обычной учетной записи: для записи статуса всех токенов в учетной записи. Обычные узлы учетной записи могут иметь любое количество конечных узлов (10 уровней), каждый конечный узел представляет тип токена и его количество; в одной учетной записи не может быть повторяющихся типов токенов.
* Узел парного счета: для записи состояния пула ликвидности определенной пары активов ZKSwap. Узел Парной учетной записи содержит только два конечных узла. Каждый конечный узел представляет баланс и тип одного токена в пуле ликвидности.

Процесс транзакции в ZKSwap - это, по сути, процесс обновления дерева состояний. Следующий раздел будет посвящен введению всех типов транзакций в ZKSwap и соответствующим изменениям их состояния.<br>

## 16. Каков план развития ZKSwap？

ZKSwap будет активно сотрудничать с биржами и поставщиками услуг крипто-кошельков для поддержки стандарта уровня 2 ZKSwap, поддержки ETH и всех бесплатных переводов ERC20 (включая стабильные монеты и т.д.), А также поддержки частных транзакций и частного криптообмена.

Ожидается, что ZKSwap завершит оптимизацию схемы системы доказательства с нулевым разглашением Plonk и внедрение ускорения GPU к концу 2021 года. Кроме того, лаборатория L2, которая поддерживает разработку ZKSwap, продолжит содействовать разработке протокола уровня 2. ZKSwap продолжит изучение применения уровня 2 в NFT, stablecoin и других областях и представит механизм EVM для создания стандартного протокола уровня 2 для поддержки использования технологии ZKSwap большим числом проектов DeFi для создания будущих приложений DeFi на уровне 2 и создания открытой и полной экосистемы DeFi уровня 2.

Лаборатория L2 также будет привержена продвижению смены парадигмы блокчейн-индустрии. Создав стандарт протокола уровня 2 с превосходным пользовательским опытом, уровень 1 станет основой клиринга и расчетов, а уровень 2 станет мостом, соединяющим приложения блокчейна и уровень 3. И входы, и выходы. Миссия ZKSwap состоит в том, чтобы позволить всем приложениям блокчейна работать в мире уровня 3 без каких-либо ограничений.

​[ZKSwap Представляет Дорожную карту на 2021 год](https://zkswapofficial.medium.com/zkswap-sets-out-roadmap-for-2021-1fb39be999b3)<br>


# Технология

## 1.ZKSpeed

Первая версия решения масштабирования ZKSwap (ZKSpeed) сочетает в себе функции решений ZK-rollup, Validium и Plasma. В дополнение к этому еще и несколько оптимизаций включая подтверждение агрегирования, оптимизацию графического процессора и оптимизацию схемы проверки, которые применяются для дальнейшего повышения пропускной способности всей сети. Для получения дополнительной информации см.:&#x20;

[ZKSwap представляет практические решение ZK-Rollups - ZKSpeed, позволяющие достичь высоких TPS и низких комиссий за газ в реальных сценариях при использовании Layer2 DeFi](https://medium.com/zkswap/zkswap-introduces-practical-zk-rollups-zkspeed-achieving-high-tps-and-low-gas-fees-in-real-6effe4e789e0)&#x20;

### 2.Спецификация проекта ZKSwap&#x20;

Протокол ZKSync предоставляет платформу ZK-Rollup для транзакций L2 с токенами формата ERC20. ZKSwap - это протокол транзакции токенов уровня 2, который использует ZK-Rollups на Ethereum и основан на системе доказательства PLONK. Спецификация проекта ZKSwap разъясняет протокол ZKSwap и его отличие от ZKSync.

&#x20;[Спецификация проекта ZKSwap](https://medium.com/zkswap/zkswap-design-specification-ca5ccb32791e)&#x20;

### 3.Валидатор&#x20;

Валидатор ZKSwap в настоящее время работает под управлением L2labs Foundation. Многие высокочастотные серверы AMD CPU были развернуты для генерации доказательств с нулевым знанием (ZK-Snarks). Фактически, не имеет значения, кто генерирует или предоставляет ZK-Snarks, если ZK-Snarks своевременно передаются в сеть первого уровня.

Команда ZKSwap стремится превратить **ZKSwap** в полностью децентрализованный протокол.&#x20;

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


# Руководства Пользователя

**Руководство Пользователя по ZKSwap**

[**ZKSwap – руководство по Web приложению**](https://zks.app/docs/tutorial-en.pdf) &#x20;

**Руководство по Майнингу**

[**Руководство по майнингу в ZKSwap**](https://zks.app/docs/staking-en.pdf)&#x20;

**Руководство по кошельку Bitkeep**

1\. Войдите в кошелек и нажмите "DApp" -> 2. Введите "zks.app" в окно поиска

![1. Нажмите DApp](/files/-MjYKqzjZZXXX7blJhTN)

![2. Введите "zks.app"](/files/-MjYKxu0szqugZS3EywC)


# Руководство пользователя по ZKSwap V2

[**ZKSwap V2 представляет**](https://en.wiki.zks.org/tutorials/zkswap-v2-tutorials#zkswap-v2-introduces)**:**

* **Неограниченный листинг токенов**
* **Быстрый вывод средств** (в течение 20-30 минут через оптимизированные схемы)
* **Персонализированный токен для комиссий** (выберите предпочитаемый токен для оплаты комиссии)
* **Развертывание L2 BSC, HECO, OKEX Chain последуют вскоре после запуска основной сети V2**.

[**Миграция активов с ZKSwap V1 на ZKSwap V2**](https://en.wiki.zks.org/tutorials/zkswap-v2-tutorials#migrate-your-assets-from-zkswap-v1-to-v2)

1.1 Войдите в <https://v1.zks.app/>, подключитесь к кошельку Ethereum и выведите свои активы из L2 в L1. (V1 и V2 имеют независимую ликвидность. Если вы добавляете ликвидность к V1, удалите ликвидность из пула L2, прежде чем выводить свои активы.)

![](/files/-MjDObKWGsiRER1eRiwc)

1.2 Вы получите свои активы примерно через 40 минут в зависимости от того, насколько загружена сеть Ethereum. (Обычно отправка на L1 занимает 1-3 минуты.)

![](/files/-MjDObKX2YWXTQLFNtXs)

1.3 Войдите в веб-приложение ZKSwap V2 ([https://zks.app](https://zks.app/)), подключитесь к кошельку основной сети ETH, укажите кошелек L2 и выберите Депозит. (Процедура депозита остается такой же, как в V1.)

[**Листинг токенов**](https://en.wiki.zks.org/tutorials/zkswap-v2-tutorials#list-a-token)

ZKSwap V2 поддерживает неограниченное количество токенов. Теперь вы можете разместить любые токены ERC-20 на ZKSwap V2.

Руководство: <https://en.wiki.zks.org/tutorials/token-token-pair-listing-tutorials>

[**Настройка токена для оплаты комиссии**](https://en.wiki.zks.org/tutorials/zkswap-v2-tutorials#fee-token-settings)

ZKSwap V2 позволяет пользователям выбирать ZKS, WBTC, ETH или USDT для оплаты комиссии. Вы можете изменить токен комиссии через Настройки в правом верхнем углу домашней страницы ZKSwap.

![](/files/-MjDObKYyHCt0daCD7zy)

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

![](/files/-MjDObKZTc3fy5UFX0FH)

В ближайшем будущем будет добавлено больше вариантов токенов для оплаты комиссии, которые будут применяться к большему количеству вариантов. Оставайтесь на связи!


# Руководство по Листингу Торговых Пар

Пользователи V2 могут залистить любые токены ERC20 оплатив комиссию за газ. ZKSwap не будет взымать комиссию за услугу листинга токенов, которая в настоящее время доступна только на веб-сайте. Вскоре ZKSwap будет поддерживать неограниченное количество токенов и пар токенов всех стандартов в мобильной и WEB версиях.

P.S. Это руководство написано для тестовой версии и может быть изменено

![](https://lh4.googleusercontent.com/eporcBbuP8LSJvdzJgc5Wg_4nnWxe3WObpH2stmibhSaFz4emLwv4JGn2QPUWTkFHBDfk_Gur8cPiqhb15iPxUiwCcvGVHy-OHX8YE1NbfDNbMySvWqvY9miSvnE0g)

**Вы также можете ознакомиться с видео руководством со по** [**ссылке**](https://www.youtube.com/watch?v=0Nw03qp4tg4)**.**

## **Листинг вашего токена**

1. Введите ERC20 адрес вашего токена в поле «Адрес контракта». Затем нажмите «Далее». Замечание: тестовая версия ZKSwap V2 **поддерживает только ERC20 токены, которые выпушены тестовой сети ropsten.** Пользователи могут получить информацию обо всех токенах ETH тестовой сети ropsten по [ссылке](https://ropsten.etherscan.io/).

![](https://lh4.googleusercontent.com/ELSJej8kLN74eAVKJetAYVja9panT0iII40uwqHOLRitmKYiIZTazjafin0SPN9idvD3mwvKvMZ_M3lw0ohxRGbYoJ7yeITHCbJeRl4sTb9-kbTuKGbpJwsDDOVJ5A)

2\. Проверьте на корректность детали токена и нажмите «Далее».

![](https://lh5.googleusercontent.com/xwn5hMtWd_r0J-STqJRkV6Ef4F9AI4w_dL5DoXVFjUXIxoDh4mc1Z0PW84RU23DS8bVz0ucdJziwzDWwSs4FBEMDHT6tVlPuYg0EoItovcaEtxIq0Vn-D58SH7PTDA)

## **Листинг вашей торговой пары**

1. Выберите токен для комиссии из ZKS, ETH и USDT, чтобы создать пару токенов. Нажмите «Отправить».&#x20;

P.S. Больше видов токенов для оплаты комисии будут добавлены в ближайшее время. Каждая пара токенов может быть указана только один раз.

![](https://lh5.googleusercontent.com/nWP1IpuMEzxpTAdiomQvc-FK1kToGRn_xPqBGUaC2AfL8zxzVjdGzxj-hIDvde-beCHOxX1igHFFLUrGJs1xqxcGvcmqyIfPur77iEE1kKi4LKR32RwEpHZAkBvRJA)

2\. Проверьте детали ваше пары. Убедитесь, что все правильно и нажмите «Подтвердить».

![](https://lh4.googleusercontent.com/-a4oIsmILfxM53-5PhvzHqQ91ShWtKEBRLy86xf6LtaV0yxF3RLDZZ0pSlrOy4uq39quLZCDhrKDwCD9wheCps-DZTGlnmUyGsw1HuaJDBVX1_w8GkOoKH_P7nFsxQ)

1. Нажмите «Просмотреть мои записи листингов», чтобы отследить статус вашей пары токенов. Обычно для того, чтобы ваша пара токенов была внесена в список ZKSwap, требуется 5-10 минут, в зависимости от того, насколько загружен Ethereum в данный момент.

![](https://lh4.googleusercontent.com/cp9zJYEwIKtgdPhck_kmfRq2u3pUzu6bfjhB-qSd0gPnmPn1NHCVK4YuCS0gEuazOXrlgb_E5emADDNMKE1wy3D1tuDiNCPAqtFP7zkdhk6AvGwz5WLrGx4oR15EMQ)

1. Поздравляем. Ваша пара токенов быа успешно добавлена на ZKSwap!

![](https://lh6.googleusercontent.com/jX13VdNU7VwH9nXi0wtr9JpfkFpsCSvoPXp-2ZyaXtV_4h-Q-0EhKF3KW0fRSx-VpcstP5sh9kRMbW0txD2ujxD0w_vV21liwJntZPI1jntQ972tQ8Rl1p2zgPhAhg)

## **Как добавить торговые пары**&#x20;

Нажмите «Список торговых пар», введите имя токена/адрес контракта или выберите один из списка токенов. Выберите пару, которой нет в списке ZKSwap, и нажмите «Отправить».

Выполните действия, указанные в разделе «Листинг вашей торговой пары».

![](https://lh3.googleusercontent.com/pTl4eRs1z_3XJzyh2BfUTWU2_w0NlzeqIHP_q64-0kKQzvLwDhlpRpJ2RyjpX3BUTuq15aJuGrU-oNukk-Zf5xRQO4rWYWrv7N3yqycftmwK3qAYlNrusvlP42pxRg)


# Руководства по Мобильному Приложению ZKSwap

## **Руководство для начинающих**<br>

1. Новые пользователи могут нажать на иконку в левом верхнем углу, или «Активы» ниже, чтобы перейти на страницу создания/импорта учетной записи.

![](https://lh3.googleusercontent.com/GXbdtgT3k80KfTqp0mYuOuiaT9PBlFD6kU6F9Pbx6bZ-S7X2wE24dD-_zhEEvGtt3EyoNKHHMjMmO0TXDbo_aamQZwz5Lbt4luusn_SnirImRDsTrgaM1v2Y1bsV0HbrgsttImY)

1. После входа на страницу, нажмите «Создать учетную запись»

![](https://lh6.googleusercontent.com/2edHULLp3PbFUVXyy-yXLTsM1QzJT8DJqnLKni8809-3AKEQJuCCTe0OEaGcu2kDOv_P8o-kI6yHulfBUf3wxgIzC7Y7cgmgzClBjbHN8N7ecNi7AdZidGymFVS_6M4lExLXqmg)

1. Система случайный образом сгенерирует seed-фразу. Обратите внимание, что seed-фраза — это единственный способ восстановить вашу учетную запись. В случае потери, она не может быть восстановлена. Убедитесь, что вы записали все слова правильно. Не используйте скриншоты, фотографии и т.п. для сохранения слов. После того, как seed-фраза была сохранена, нажмите «Я сохранил резервную копию, далее».

![](https://lh3.googleusercontent.com/UIDBqP0mpxKYpaVuVbMAFYqujMLX7lGBD06RhRMvrTaklRCLVPM0bkd6FLSy0XMCghSa1oYoBiv9efv6Rt_T6Z_XRy2hEe8z-6mqSCdAd_JRa-ovtVTBzFEL6YiwryVk1l3TD3Q)

1. Введите слова из seed-фразы одно за другим в том же порядке и нажмите «Далее».

![](https://lh4.googleusercontent.com/XfCZvM2I3GBni5XpiN4l6UsUKZrG7L_33xk84oEayFFa4Dtiu3QHBET6dy11Zit5oQ1EAL6iR7EdAcg0IO35GiwVgp0NFLmONkxwupXTIYfF4_7zbCveUFrKlCwLaKBz4oviGG4)

1. Установите пароль, нажмите «Подтвердить», и кошелек будет успешно создан. Обратите внимание, что платформа не хранит ваш пароль. После того, как пароль забыт, восстановить учетную запись можно будет только с помощью seed-фразы.

![](https://lh4.googleusercontent.com/raJBNPV_0ROzrhiAtQdRRQQLYearBEVBPUVOVZAWK6Ft1ItZN-SVv79r7KH5elujyOk-aL8Tll7pi_Jo7ZEDgx6ywMTc7qVYIO6JylGTWsow98q1GNgFsCo2EEOQLE8i-AxHqRY)

## **Импорт учетной записи**<br>

1. Нажмите «Импортировать учетную запись»

![](https://lh3.googleusercontent.com/4h9u2zkYsK_XuaD1zHtiYxaYg4D76pXYYgl9yo8jrKOX-hxZaDj7bwCL96_HCmzAh5m9yI_euzx7zi7U3_ttwrYHprH6-wdxccGZn-qOET7rpTP8yff7ylbPQ_RPEN3R5G54mkI)

1. Вы можете импортировать учетную запись, импортировав seed-фразу или импортировав закрытый ключ.

![](https://lh5.googleusercontent.com/JuMkLk0vLPWQdGKtIzryUROj7H7BY0VRqZ4XiZgtUchVr5a17k41NfSD5UWhNcaUOdt_pmrKQ-eFsaC5pFrMiXw7_Yv5ns4oLUaTZY-i1NJNteWK-4HlfTjqFfAD3VmZm6ELUWM)

1. Если вы выбрали импорт seed-фразы, то введите ключевые слова в правильном порядке и нажмите «Импорт». Если вы решили импортировать закрытый ключ, то введите корректно его адрес и нажмите «Импорт».

![](https://lh3.googleusercontent.com/Bdha4rXbEA4A_J6-QJkViJjqobyluTDRAm1xwS3uQaSMQ2PZLGjx31k34FysvfAuGrGjEoWng7jEWMBOFvS7zIYsX4AeP_d-OiG40dxa6WY1AuLTz0yekb8rtHsIqfAhxrsCgdo) ![](https://lh6.googleusercontent.com/NQq9HYKIuTlGH8tp3Y-dVf2Tt7W9dVeRSVM_b7yMFBugdPo29wh6efr4_bMZaO1xMJnY63GwVR_XHn8mBaskGjsmanJWaSYDWFUu0Qz7NhwuC3_Ib-r-Pkauzy6Tq9NuHOgdCIo)

1. Установите пароль, нажмите «Подтвердить», и кошелек будет успешно создан. Обратите внимание, что платформа не хранит ваш пароль. После того, как пароль забыт, восстановить учетную запись можно будет только с помощью seed-фразы.

![](https://lh4.googleusercontent.com/raJBNPV_0ROzrhiAtQdRRQQLYearBEVBPUVOVZAWK6Ft1ItZN-SVv79r7KH5elujyOk-aL8Tll7pi_Jo7ZEDgx6ywMTc7qVYIO6JylGTWsow98q1GNgFsCo2EEOQLE8i-AxHqRY)

## **Главная**

Пользователи могут отслеживать текущие цены на популярные токены на домашней странице, а также их рост и падение за 24 часа и аналогичные данные с Layer-2.

![](https://lh6.googleusercontent.com/1tPppp8_THTU5VfhXNrzkIhrgvGpQ3lc2uhuVfxmy-JNZzP9r3IbNsiy6Bzuc1rPaCr2QlaCV39Vh_d__hH_ELa4kRTgh2mM1pVOv529W_3q6UPFA8fNldIKFJ4kAVygHErtSOc)

## **Рынки**

Пользователи могут видеть цены всех поддерживаемых торговых пар, а также их рост и падение на странице «Рынок». Они могут выполнять поиск в поле поиска.

![](https://lh5.googleusercontent.com/YryMMufy33I0lYLvKojgj7GW0L4KiXhHWXIwI85wwwNYYtWfvolk2UZSFTAU5FcmhsrQQIUTaLiiETIwvRTY6cUnuX6V_y45dnZytUDLwbNVg3WIymyMOnxS1jOHLbhzuG2DwS0)

## **L1/L2 Перевод**

1. Выберите учетную запись Ether (L1) или учетную запись (L2) на странице «Активы», и нажмите «Отправить».

![](https://lh3.googleusercontent.com/h26cf9P6jKyYiKI1UdrWoJICVnTCRzUDZXvPSjMQ51fo9Z2WA50Cu-Ql4z8KSAYGAt3Q6YaQiJIAadE08jxFrelhYO7Q-giFjRFZ5t-N0BIF_KU2xzK16N7ZVwhHieiCGxWcm9g)

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

![](https://lh6.googleusercontent.com/wM6k52zO_6eqlM8AXDYyQ3DBZBxn1flObCoBeInAfpLdDohX2eLc-1jJSYhvPcH9H9ZFR1JdUCJDhoEyZd4T8qYOLKSblKBT4DFB-DSsL_RtA64jmLJK2UjG2a7hVz9X_noQiEI) ![](https://lh6.googleusercontent.com/UdY4SEa-HoNEBua1YpIxGCzrdgolRR13GfwsZr7WoJjTWN_VoF4YJjlrye80auDDEqsBl7N35eoYB1tmKXslLVO8vofOO-KLSLST4sKrkS642cPvkS_KBArpRKGXzwzETC-cuqQ)<br>

## **L1/L2 Поступления**

1. Нажмите «Получить» на странице «Активы».

![](https://lh4.googleusercontent.com/nwvG1KeiGa6-cwYkU3KdcugwRsDGp40tfTB2EG6iJJqz0Pgva1A4eShOU305RZALfnshkyLjL62s4y2kvFNP4WNp7G7XFtS10u7qs2JU3Cbj3yzSjf6XeYJ52OUwIfLIJ1kAhWE)

1. Отсканируйте QR-код или скопируйте адрес для передачи в учетную запись L1 / L2 текущего адреса. Перевод может происходить только между адресами одного уровня, то есть перевод с учетной записи Уровня 1 (L1) может быть произведен только на другие учетные записи Уровня 1.

![](https://lh5.googleusercontent.com/KfYQNcfZfZu1dnoLDNVTQgLIr-veGQ0Du_JPNik8Y88G9_0nMs88weFj0IB1CwU5-OdxuFl5ZTtF0fJ8XXiE1-C0oXECGr4J0tmSD4mbkVXAQdQKmTvH6E1up3TLAwN9AT96i7o) ![](https://lh4.googleusercontent.com/P0JXPAlTK_Wee18-ldhryw3z_9U0UskpE3RyXCebVp3jKumRp__79P_7pY4Qi72mCqko_yxjeVXz5XaLV2SUvUIA7n87mVZYXYk2BpClI_AAneKoX8SDQ7Lasp5sy7yceRER4lE)<br>

## **Перевод**

Выберите учетную запись в сети Ether (L1) или быструю учетную запись (L2) на странице «Активы». Нажмите «Перевод», введите сумму и нажмите «ПЕРЕВОД».

![](https://lh4.googleusercontent.com/rgQpGHHTR4pSo3_0K7DyaP4NA0BhmZcNCFCDpc592XTUQbTTxHhvUn14i8RUC_9ziwETOmoRzYf2Dx_OvwmmCAbhA7YUAq_BbjlI8dulqE1eL1OJnNQn_D-prF7uiPOTmhDQsv4)

## **Обмен**

1. Войдите на страницу обмена и выберите токен. Вы можете ввести сумму в поле ввода или перетащить ползунок. Затем нажмите «Обмен».

![](https://lh3.googleusercontent.com/SIBcbCGxChiQp1uCEnCtBTw-dpeE_k65tq3f5CfP9PNv3ELGEfNNBSQBToa5tC53K9Q5FNp6YkK1MlX6kD5vp6JukAdgBsuiqQUR99QoqLDY34TUhOSCpt_KZVl2eaKffeXaQXo)

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

![](https://lh6.googleusercontent.com/mpsXuUdVzEVjULwRL2rKqX2yAKWp5teE4DXGIFCHJQbwOhc-LEBTRPtJ3s_gnf19tzKumbvj0TImYpc1qPXJ9bFX_KKq16xTDCU0Z02bivJgIJPWKivYfgMuIu3zqZnPP-Dw0e0) ![](https://lh3.googleusercontent.com/H_-zN9O8sZk3dO4x_ExtmRnzq5omSL97z0HNSwbqeSHfW8GunlqlY2Cr-fV6__2nWdGayDO_1WeBesWuhSe5h5-nJMY40_VpuX11tRyfLN6c0VhjnWyyq93iS3rLNA4tEuuGtcw)<br>


# Руководство по мобильному приложению ZKSwap - v2

Основываясь на предыдущей версии, мы делаем некоторую оптимизацию продукта в v2, вот руководство по обновлениям.

Видеоурок: <https://www.youtube.com/watch?v=kHF_wQp2K3k>

**Домашняя страница**

Основные функции: ввод, отправка и вывод средств через домашнюю страницу (как в предыдущей версии). Пользователь может просмотреть свои активы L2 здесь

![](/files/-MjDSdrFPGuxoK68ZwNE)

**Перейти на кошелек Уровня 1**

Нажмите кнопку активов L1 и вы увидите активы своего кошелька L1. Вы по-прежнему можете использовать кошелек L1 для получения и отправки денег.

![](/files/-MjDSdrG4VK11zq-_mJ9)

**Выбор кошелька**

Щелкните значок в верхнем левом углу, затем выберите свой кошелек.

![](/files/-MjDSdrHZkkNns-1gaPk)

**Отслеживайте рынки и добавляйте свой токен в избранное**

На странице обмена вы можете отслеживать изменения рынка. Нажмите на «звездочку», чтобы добавить монету в избранные.

![](/files/-MjDSdrI_Tdafx74jE3M)

**Обзор**

На этой странице вы получите доступ к нашей деятельности по майнингу, можете подключится к проводнику ZKSwap, форуму и WIKI.

![](/files/-MjDSdrJK_xbcKdy8DLp)

**Настройки и управление кошельком**

В этой версии мы поддерживаем несколько кошельков. Пользователи могут щелкнуть «управление кошельком2, а затем щелкнуть значок «+» в правом верхнем углу, чтобы добавить дополнительные кошельки.

![](/files/-MjDSdrKtHlIvXHvJ_Y1)

![](/files/-MjDSdrL4ILKaTrKRevJ)


# Взаимодействие с ZKSwap

{% content-ref url="/pages/-MhRgG3crZUQsAjuYOdN" %}
[RESTful API](/vzaimodeistvie-s-zkswap/restful-api)
{% endcontent-ref %}

{% content-ref url="/pages/-MhRgFjUflPuq3PCNtGJ" %}
[Создание транзакции](/vzaimodeistvie-s-zkswap/sozdanie-tranzakcii)
{% endcontent-ref %}


# RESTful API

## Получить адрес контракта

<mark style="color:blue;">`GET`</mark> `https://api.zks.app/v2/:network/contract-address`

Возвращает контракты, используемые для депозита и т.д. В большинстве случаев ответ не меняется.

#### Path Parameters

| Name    | Type   | Description                                       |
| ------- | ------ | ------------------------------------------------- |
| network | number | Номер сети: 1 для основной сети, 3 для Ropsten... |

{% tabs %}
{% tab title="200 " %}

```csharp
{
    "success": true,
    "data": {
        "gov": "0x86E527BC3C43E6Ba3eFf3A8CAd54A7Ed09cD8E8B",
        "main": "0x6dE5bDC580f55Bc9dAcaFCB67b91674040A247e3"
    }
}
```

{% endtab %}
{% endtabs %}

## Получить список токенов

<mark style="color:blue;">`GET`</mark> `https://api.zks.app/v2/:network/tokens`

Возвращает все токены, которые залистились на ZKSwap.

#### Path Parameters

| Name    | Type   | Description                                       |
| ------- | ------ | ------------------------------------------------- |
| network | number | Номер сети: 1 для основной сети, 3 для Ropsten... |

{% tabs %}
{% tab title="200 " %}

```csharp
{
    "success": true,
    "data": [
        {
            "id": 0,
            "address": "0x0000000000000000000000000000000000000000",
            "decimals": 18,
            "symbol": "ETH",
            "icon": "https://s.zks.app/icons/v2/0x0000000000000000000000000000000000000000.png",
            "approved": true
        },
        {
            "id": 10,
            "address": "0xe4815ae53b124e7263f08dcdbbb757d41ed658c6",
            "decimals": 18,
            "symbol": "ZKS",
            "icon": "https://s.zks.app/icons/v2/0xe4815ae53b124e7263f08dcdbbb757d41ed658c6.png",
            "approved": true
        },
        {
            "id": 32,
            "address": "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9",
            "decimals": 18,
            "symbol": "AAVE",
            "icon": "https://s.zks.app/icons/v2/0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9.png",
            "approved": true
        }
    ]
}
```

{% endtab %}
{% endtabs %}

Ниже представлена схема для одного из токенов.

| Field    | Type    | Comment                                                               |
| -------- | ------- | --------------------------------------------------------------------- |
| id       | number  | The unique ID starting from 0, which is native coin.                  |
| address  | address | Native coin's address is `0x0000000000000000000000000000000000000000` |
| decimals | number  | The number of decimals used to get its user representation.           |
| symbol   | string  | The unique symbol indicates the symbol.                               |
| icon     | string  | The image url shows the icon.                                         |

## Получить цены токенов

<mark style="color:blue;">`GET`</mark> `https://api.zks.app/v2/:network/tokens/price`

Возвращает все цены токенов с ZKSwap.

#### Path Parameters

| Name    | Type   | Description                                       |
| ------- | ------ | ------------------------------------------------- |
| network | number | Номер сети: 1 для основной сети, 3 для Ropsten... |

{% tabs %}
{% tab title="200 " %}

```csharp
{
    "success": true,
    "data": [
        {
            "id": 0,
            "price": "2968.1483043140707263"
        },
        {
            "id": 10,
            "price": "0.7862725980605806"
        },
        {
            "id": 32,
            "price": "0"
        }
    ]
}
```

{% endtab %}
{% endtabs %}

| Field | Type   | Comment          |
| ----- | ------ | ---------------- |
| id    | number | The unique ID.   |
| price | string | The unit is USD. |

## Получить список торговых пар

<mark style="color:blue;">`GET`</mark> `https://api.zks.app/v2/:network/pairs`

Возвращает все торговые пары, которые были добавлены на ZKSwap.

#### Path Parameters

| Name    | Type   | Description                                       |
| ------- | ------ | ------------------------------------------------- |
| network | number | Номер сети: 1 для основной сети, 3 для Ropsten... |

{% tabs %}
{% tab title="200 " %}

```csharp
{
    "success": true,
    "data": [
        {
            "id": 16384,
            "address": "0xda097aa54e44e389f2acadb69027c8780a8ec852",
            "decimals": 18,
            "symbol": "liquidity_10_32",
            "id_a": 10,
            "id_b": 32,
            "anchored": 10
        },
        {
            "id": 16385,
            "address": "0x9c883156e724ceb48d230da0132fab4aa721ae84",
            "decimals": 18,
            "symbol": "liquidity_8_10",
            "id_a": 8,
            "id_b": 10,
            "anchored": 8
        },
        {
            "id": 16386,
            "address": "0xaa45c964e21eafb38574e9d000adbaf85acfbb80",
            "decimals": 18,
            "symbol": "liquidity_0_10",
            "id_a": 0,
            "id_b": 10,
            "anchored": 0
        }
    ]
}
```

{% endtab %}
{% endtabs %}

| Field    | Type    | Comment                                                                     |
| -------- | ------- | --------------------------------------------------------------------------- |
| id       | number  | The unique ID starting from 16384.                                          |
| address  | address | It's the same as the LP token on Layer-1.                                   |
| decimals | number  | The number of decimals used to get its user representation, it's always 18. |
| symbol   | string  | The unique symbol follows the format `liquidity_{idA}_{idB}`.               |
| id\_a    | string  | The ID of token A.                                                          |
| id\_b    | string  | The ID of token B.                                                          |

## Получить цены торговых пар

<mark style="color:blue;">`GET`</mark> `https://api.zks.app/v2 /:network/pairs/price`

Возвращает цены всех торговых пар с ZKSwap.

#### Path Parameters

| Name    | Type   | Description                                       |
| ------- | ------ | ------------------------------------------------- |
| network | number | Номер сети: 1 для основной сети, 3 для Ropsten... |

{% tabs %}
{% tab title="200 " %}

```csharp
{
    "success": true,
    "data": [
        {
            "id": 16384,
            "amount_a": "0",
            "amount_b": "0",
            "price": "0",
            "totalSupply": "0"
        },
        {
            "id": 16385,
            "amount_a": "1464474.697055",
            "amount_b": "1859053.645591589842522106",
            "price": "1782999.9600978410438763",
            "totalSupply": "1.642708614502310855"
        },
        {
            "id": 16386,
            "amount_a": "33.667299246695146243",
            "amount_b": "127772.687849889681268329",
            "price": "96.778364123199939",
            "totalSupply": "2065.121436478357148901"
        }
    ]
}
```

{% endtab %}
{% endtabs %}

| Field       | Type   | Comment                                                               |
| ----------- | ------ | --------------------------------------------------------------------- |
| id          | number | The unique ID.                                                        |
| amount\_a   | string | The formatted amount of token A in the pair (also known as reverse0). |
| amount\_b   | string | The formatted amount of token B in the pair (also known as reverse1). |
| price       | string | The number indicates how much 1 LP token values.                      |
| totalSupply | string |                                                                       |

## Получить баланс учетной записи

<mark style="color:blue;">`GET`</mark> `https://api.zks.app/v2/:network/account/:address/balances`

Возвращает баланс указанного адреса. Если по адресу нет токена/пары, то баланс не будет возвращен. Все стоимости активов указаны в USD.

#### Path Parameters

| Name    | Type   | Description                                       |
| ------- | ------ | ------------------------------------------------- |
| network | number | Номер сети: 1 для основной сети, 3 для Ropsten... |
| address | string | Адрес учетной записи без учета регистра.          |

{% tabs %}
{% tab title="200 " %}

```csharp
{
    "success": true,
    "data": {
        "balances": {
            "tokens": [
                {
                    "id": 8,
                    "amount": "14.918202",
                    "Value": "0"
                },
                {
                    "id": 10,
                    "amount": "720651.4115822",
                    "Value": "0"
                },
                {
                    "id": 32,
                    "amount": "0.6027962441",
                    "Value": "0"
                }
            ],
            "pairs": [
                {
                    "id": 16385,
                    "amount": "0.000294957624075052",
                    "Value": "523.4426987137814436216811147071194148"
                },
                {
                    "id": 16387,
                    "amount": "0.000004427188724235",
                    "Value": "482.09321566002294012027060109989963"
                }
            ]
        },
        "asset": {
            "tokens": "562353.0359099654094174914699",
            "pairs": "1005.5359143738043837419517158070190448",
            "total": "563358.5718243392138012334216158070190448"
        }
    }
}
```

{% endtab %}
{% endtabs %}

## Получить информацию об учетной записи

<mark style="color:blue;">`GET`</mark> `https://api.zks.app/v2/:network/account/:address/info`

Возвращает id, nonce и pubKeyHash учетной записи. Если у учетной записи нет никаких активов на ZKSwap, то id будет 0.

#### Path Parameters

| Name    | Type   | Description                                       |
| ------- | ------ | ------------------------------------------------- |
| network | number | Номер сети: 1 для основной сети, 3 для Ropsten... |
| address | string | Адрес учетной записи без учета регистра.          |

{% tabs %}
{% tab title="200 " %}

```csharp
{
    "success": true,
    "data": {
        "id": 2,
        "nonce": 1256,
        "pub_key_hash": "sync:e4762290aa804636fd63ee25fe91497a8ea01dea"
    }
}
```

{% endtab %}
{% endtabs %}

## Получить комиссии учетной записи

<mark style="color:blue;">`GET`</mark> `https://api.zks.app/v2/:network/account/:address/fee`

Все комиссии в USD.

#### Path Parameters

| Name    | Type   | Description                                         |
| ------- | ------ | --------------------------------------------------- |
| network | number | Номер сети: 1 для основной сети, 3 для сети Ropsten |
| address | string | Адрес учетной записи без учета регистра             |

{% tabs %}
{% tab title="200 " %}

```csharp
{
    "success": true,
    "data": {
        "transfer": "0",
        "withdraw": "5",
        "add_liquidity": "0",
        "remove_liquidity": "0"
    }
}
```

{% endtab %}
{% endtabs %}

## Получить список транзакций

<mark style="color:blue;">`GET`</mark> `https://api.zks.app/v2/:network/txs`

Возвращает список транзакций.

#### Path Parameters

| Name    | Type   | Description                                       |
| ------- | ------ | ------------------------------------------------- |
| network | number | Номер сети: 1 для основной сети, 3 для Ropsten... |

#### Query Parameters

| Name    | Type   | Description                                                                                      |
| ------- | ------ | ------------------------------------------------------------------------------------------------ |
| address | string | Адрес транзакции. При этом не важно - это отправитель или получатель.                            |
| types   | string | Список типов, разделенных знаком \| . Ниже указаны все типы. Напр. AddLiquidity\|RemoveLiquidity |
| token   | number | Уникальный идентификатор токена.                                                                 |
| start   | number | По умолчанию 0.                                                                                  |
| limit   | number | По умолчанию 50. Максимум 50.                                                                    |

{% tabs %}
{% tab title="200 " %}

```csharp
{
    "success": true,
    "data": {
        "pagination": {
            "total": 2,
            "start": 0,
            "limit": 100
        },
        "data": [
            {
                "amount": "2",
                "block_number": 1920,
                "created_at": 1628344581,
                "fail_reason": "",
                "fee": "0",
                "fee_token": 0,
                "fee_value": "0",
                "from": "0x961b513dfd3e363c238e0f98219ee02552a847bd",
                "id": 6014,
                "nonce": 1252,
                "status": "verified",
                "success": true,
                "to": "0x1c65291ba1c67b539d6f957fcc2f1944c146dbc9",
                "token": {
                    "id": 10,
                    "symbol": "ZKS"
                },
                "tx_hash": "0x3dca53000392ff1fc059f40b0a64a247d94bd7d46ec05397da13aaf592cb902e",
                "tx_type": "Transfer",
                "value": "1.72841"
            },
            {
                "amount": {
                    "amount": "0.000004427188724235",
                    "amount_a": "0.1",
                    "amount_b": "196"
                },
                "block_number": 14,
                "created_at": 1626329003,
                "fail_reason": "",
                "fee": "0",
                "fee_token": 8,
                "fee_value": "0",
                "from": "0x961b513dfd3e363c238e0f98219ee02552a847bd",
                "id": 19,
                "nonce": 2,
                "status": "verified",
                "success": true,
                "to": "0x2e35bb0d1570b1fb816255974a21b375cefe1eca",
                "token": {
                    "id": 16387,
                    "id_a": 0,
                    "id_b": 8,
                    "symbol_a": "ETH",
                    "symbol_b": "USDT"
                },
                "tx_hash": "0x42453836dbe9689a75be663534a5c3de73901c38c56defb406b9135a510625b2",
                "tx_type": "AddLiquidity",
                "value": "392"
            }
        ]
    }
}
```

{% endtab %}
{% endtabs %}

Каждая транзакция содержит следующие поля:

| Field         | Type    | Comment                                                                                                                                 |
| ------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| tx\_hash      | string  | The hash of the transaction.                                                                                                            |
| tx\_type      | string  | One of the following: `Deposit`, `Transfer`, `Withdraw`, `Swap`, `AddLiquidity` and `RemoveLiquidity`.                                  |
| status        | string  | `pending` or `verified`                                                                                                                 |
| from          | address | The transaction sender.                                                                                                                 |
| to            | address | The transaction receiver. For `Swap`, `AddLiquidity` and `RemoveLiquidity`, the receiver is the pair address.                           |
| token         | object  | It always contains `id`. For `Swap`, `AddLiquidity` and `RemoveLiquidity`, it contains `id_a` and `id_b`.                               |
| amount        | mixed   | For `Deposit`, `Withdraw` and `Transfer`, it's the formatted amount. For other type, it's an object contains `amount_a` and `amount_b`. |
| value         | string  | The value of transaction in USD.                                                                                                        |
| fee\_token    | number  | The ID of transaction fee token.                                                                                                        |
| fee           | string  | The transaction fee.                                                                                                                    |
| fee\_value    | string  | The value of transaction fee in USD.                                                                                                    |
| block\_number | number  | The block it belongs.                                                                                                                   |
| created\_at   | number  | The UNIX timestamp when the transaction created.                                                                                        |
| success       | boolean | Indicates the transaction is successful or not.                                                                                         |
| fail\_reason  | string  | Only contains message when transaction failed.                                                                                          |
| nonce         | number  | Similar with ETH's nonce.                                                                                                               |

## Получить транзакцию

<mark style="color:blue;">`GET`</mark> `https://api.zks.app/v2/:network/tx/:tx_hash`

Возвращает данные транзакции.

#### Path Parameters

| Name     | Type   | Description                                       |
| -------- | ------ | ------------------------------------------------- |
| network  | number | Номер сети: 1 для основной сети, 3 для Ropsten... |
| tx\_hash | string | Хэш транзакции.                                   |

{% tabs %}
{% tab title="200 " %}

```csharp
{
    "success": true,
    "data": {
        "id": 586433,
        "tx_hash": "0x9073df41def307564a8cd569cbae0c2a813b4c3d5f692e1a3a8323b7fab42d2d",
        "tx_type": "AddLiquidity",
        "status": "verified",
        "from": "0xd6e1e53465f50d4b1a8294b052e5f972fba5ebe4",
        "to": "0x5c7d7683758b449c11fcbd68da4e9a5398073f35",
        "token": {
            "id": 213,
            "id_a": 30,
            "id_b": 29,
            "symbol_a": "BUSD",
            "symbol_b": "USDT"
        },
        "amount": {
            "amount": "0.000261185806411614",
            "amount_a": "261.08086447",
            "amount_b": "261.495942"
        },
        "value": "522.99188",
        "fee": "0",
        "fee_value": "0",
        "fee_b": "0",
        "fee_b_value": "0",
        "block_number": 41440,
        "created_at": 1617298650,
        "success": true,
        "fail_reason": "",
        "nonce": 10
    }
}
```

{% endtab %}
{% endtabs %}

## Отправить транзакцию

<mark style="color:green;">`POST`</mark> `https://api.zks.app/v2/:network/tx`

Отправляет транзакцию на Уровень 2 в ZKSwap. Возвращает хеш транзакции, если она была принята.

#### Path Parameters

| Name    | Type   | Description                                       |
| ------- | ------ | ------------------------------------------------- |
| network | number | Номер сети: 1 для основной сети, 3 для Ropsten... |

#### Request Body

| Name           | Type    | Description                                             |
| -------------- | ------- | ------------------------------------------------------- |
| tx             | number  | Подписанные данные транзакции                           |
| signature      | object  | Подпись для Уровня 1. Для ChangePubKey должен быть null |
| fastProcessing | boolean | null                                                    |

{% tabs %}
{% tab title="200 " %}

```
```

{% endtab %}
{% endtabs %}

**Нажмите** [**здесь**](https://ru.wiki.zks.org/vzaimodeistvie-s-zkswap/sozdanie-tranzakcii)**, чтобы узнать, как создать транзакцию.**<br>


# Создание транзакции

В данной статье мы будем использоваться этот кошелек для примера:

```c
Address: 0x026A25EfbcEFb2e481d005E4F00Ccced0AF511FF
Private Key: 0x1c1a49fea9a4ede1dc8e582639f498d41fa3c4a9e2ab2b9d740a4a3ec14e1cbf
```

## **Уровень-1 (Layer-1)**

Единственная транзакция, которая совершается на Уровне-1 – это депозит. Она имеет два подтипа `DepositETH и DepositERC20`.

### **ABIs**

```cpp
[
  {
    "constant": false,
    "inputs": [
      {
        "internalType": "contract IERC20",
        "name": "_token",
        "type": "address"
      },
      {
        "internalType": "uint104",
        "name": "_amount",
        "type": "uint104"
      },
      {
        "internalType": "address",
        "name": "_franklinAddr",
        "type": "address"
      }
    ],
    "name": "depositERC20",
    "outputs": [],
    "payable": false,
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "constant": false,
    "inputs": [
      {
        "internalType": "address",
        "name": "_franklinAddr",
        "type": "address"
      }
    ],
    "name": "depositETH",
    "outputs": [],
    "payable": true,
    "stateMutability": "payable",
    "type": "function"
  }
]
```

### **Депозит ETH**

Пример кода:

```csharp
import { Wallet, Contract, utils } from 'ethers'

const contract = new Contract('0x8ECa806Aecc86CE90Da803b080Ca4E3A9b8097ad', ABI, wallet)
const wallet = new Wallet('0x1c1a49fea9a4ede1dc8e582639f498d41fa3c4a9e2ab2b9d740a4a3ec14e1cbf')

async function depositETH(amount) {
  const tx = await contract.depositETH(wallet.address, {
    value: utils.parse(amount)
  })
  return tx
}

// deposit 1 ETH
depositETH('1').then(console.log)
```

### **Депозит ERC20**

Как и в других проектах вы должны подтвердить основной адрес контракта ZKSwap, чтобы внести свои токенты ERC20 на депозит. Будьте осторожны с токенами, у которых есть ограничения (Подробнее см. [здесь](https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729)).&#x20;

Пример кода:

```csharp
import { Wallet, Contract, utils } from 'ethers'

const contract = new Contract('0x8ECa806Aecc86CE90Da803b080Ca4E3A9b8097ad', ABI, wallet)
const wallet = new Wallet('0x1c1a49fea9a4ede1dc8e582639f498d41fa3c4a9e2ab2b9d740a4a3ec14e1cbf')

async function depositERC20(amount, tokenAddress) {
  const tokenContract = new Contract(tokenAddress, ERC20_ABI, wallet)
  // check allowance
  const allowance = await tokenContract.allowance(wallet.address, MAIN_CONTRACT_ADDRESS)
  let nonce
  if (allowance.lt(utils.parse(amount)) {
    // approve
    const MAX_AMOUNT = '0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'
    const approveTx = await tokenContract.allow(MAIN_CONTRACT_ADDRESS, MAX_AMOUNT)
    nonce = approveTx.nonce + 1
  }
  const tx = await contract.depositERC20(tokenAddress, utils.parse(amount), wallet.address, {
    nonce
  })
  return tx
}

// deposit 100 ZKS
depositERC20('100', '0xe4815ae53b124e7263f08dcdbbb757d41ed658c6').then(console.log)
```

### **Уровень-2**

При отправке транзакции на ZKSwap через API необходимо заполнить три поля: `tx`, `signature` и `fastProcessing`. Далее по тексту `Signed Transaction` относиться к полю `tx`, а ETH Signature относится к полю `signature`.

### **Приватный ключ**

Подпишите следующее сообщение приватным ключом Уровня 1, чтобы получить сид фразу Уровня 2. И используйте [криптографические библиотеки zkSync](https://zksync.io/api/sdk/crypto.html), чтобы получить приватный ключ.

{% tabs %}
{% tab title="Plain Text" %}

```csharp
Access ZKSwap account.

Only sign this message for a trusted client!
```

{% endtab %}

{% tab title=" JavaScript" %}

```javascript
const msg = 'Access ZKSwap account.\n\nOnly sign this message for a trusted client!'
```

{% endtab %}
{% endtabs %}

Вот полный пример получения приватного ключа с помощью [zksync-crypto](https://www.npmjs.com/package/zksync-crypto) в JavaScript.

```csharp
import { Wallet, Contract, utils } from 'ethers'
import { privateKeyFromSeed, private_key_to_pubkey_hash } from 'zksync-crypto'

const wallet = new Wallet('0x1c1a49fea9a4ede1dc8e582639f498d41fa3c4a9e2ab2b9d740a4a3ec14e1cbf')

async function getPrivateKey() {
    const msg = 'Access ZKSwap account.\n\nOnly sign this message for a trusted client!'
    const signature = await wallet.signMessage(msg)
    const seed = utils.arrayify(signature)

    // Get private key
    const privateKey = privateKeyFromSeed(seed)
    
    return privateKey
}

getPrivateKey().then(console.log)
```

### Хеш открытого ключа

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

```csharp
import { utils } from 'ethers'
import { private_key_to_pubkey_hash } from 'zksync-crypto'

const pubKeyHash = `sync:${utils.hexlify(private_key_to_pubkey_hash(privateKey)).substr(2)}`
```

### Подпись

Перед отправкой транзакции в ZKSwap вам необходимо подписать данные транзакции.

```csharp
import { utils } from 'ethers'
import { sign_musig } from 'zksync-crypto'

function signMessage(privateKey, msgBytes) {
    const signaturePacked = sign_musig(privateKey, msgBytes)
    
    const pubKey = utils.hexlify(signaturePacked.slice(0, 32)).substr(2)
    const signature = utils.hexlify(signaturePacked.slice(32)).substr(2)
    
    return {
        pubKey,
        signature
    }
}

const msgBytes = utils.concat([type, accountId, ...etc])
const signature = signMessage(privateKey, msgBytes)

```

### **Замена открытого ключа**

После того, как учетная запись была «зарегистрирована» в ZKSwap (посредством перевода или депозита), вы можете изменить pubKeyHash учетной записи, чтобы совершать любую транзакцию на Уровне 2. Это особая транзакция, которую не нужно подписывать приватным ключом Уровня 2.

**Поля транзакции**

| **Field**    | Type    | Comment              |
| ------------ | ------- | -------------------- |
| type         | string  | ChangePubKey         |
| accountId    | number  | Your account ID.     |
| account      | address | Your address.        |
| newPkHash    | number  | The public key hash. |
| nonce        | number  | Your current nonce.  |
| ethSignature | string  | Layer-1 signature    |

**Пример подписанной транзакции**

```csharp
{
    "type": "ChangePubKey",
    "accountId": 83670,
    "account": "0x026A25EfbcEFb2e481d005E4F00Ccced0AF511FF",
    "newPkHash": "sync:83f62ba777515089eb905a375f77f59ddfada116",
    "nonce": 0,
    "ethSignature": "0x66c1ef3611a634e400301375b291a0835b0e31237273e1bdab45acc3ef27c761674fd5e5a706566e5175e8e18306f5b8d1d36016f3894e84d527c3c97e92bcf71c"
}
```

**ETH подпись**

{% tabs %}
{% tab title="Шаблон сообщения" %}

```csharp
Register ZKSwap pubkey:

{pubKeyHash}
nonce: {hexlifiedNonce}
account id: {hexlifiedAccountId}

Only sign this message for a trusted client!
```

{% endtab %}

{% tab title="Сообщение для подписи" %}

```csharp
Register ZKSwap pubkey:

83f62ba777515089eb905a375f77f59ddfada116
nonce: 0x00000000
account id: 0x000146d6

Only sign this message for a trusted client!
```

{% endtab %}

{% tab title="Подпись" %}

```csharp
0x66c1ef3611a634e400301375b291a0835b0e31237273e1bdab45acc3ef27c761674fd5e5a706566e5175e8e18306f5b8d1d36016f3894e84d527c3c97e92bcf71c
```

{% endtab %}
{% endtabs %}

### **Перевод**

**Поля транзакции**

| Bytes Order | **Field** | Type    | Bytes Length | Comment                                  | Bytes Example                                |
| ----------- | --------- | ------- | ------------ | ---------------------------------------- | -------------------------------------------- |
| 0           | type      | string  | 1            | Transfer                                 | `0x05`                                       |
| 1           | accountId | number  | 4            | Your account ID.                         | `0x0000053a`                                 |
| 2           | from      | address | 20           | Your address.                            | `0x026a25efbcefb2e481d005e4f00ccced0af511ff` |
| 3           | to        | address | 20           | The target address you want to transfer. | `0x961b513dfd3e363c238e0f98219ee02552a847bd` |
| 4           | token     | number  | 2            | The ID of the token.                     | `0x000a`                                     |
| 5           | amount    | string  | 5            | The amount you want to transfer.         | `0x4a817c8008`                               |
| 6           | feeToken  | number  | 1            | The ID of fee token.                     | `0x0a`                                       |
| 7           | fee       | string  | 2            |                                          | `0x0000`                                     |
| 8           | chainId   | number  | 1            | 11 for mainnet, 128 for ropsten.         | `0x0b`                                       |
| 9           | nonce     | number  | 4            | Your current nonce.                      | `0x00000001`                                 |
| -           | signature | object  |              | Contains your `pubKey` and signature.    |                                              |

**Пример Full Bytes**

```csharp
0x050000053a026a25efbcefb2e481d005e4f00ccced0af511ff961b513dfd3e363c238e0f98219ee02552a847bd000a4a817c80080a00000b00000001
```

**Пример подписанной транзакции**

```csharp
{
    "type": "Transfer",
    "accountId": 1338,
    "from": "0x026A25EfbcEFb2e481d005E4F00Ccced0AF511FF",
    "to": "0x961b513dfd3e363c238e0f98219ee02552a847bd",
    "token": 10,
    "amount": "1000000000000000000",
    "feeToken": 10,
    "fee": "0",
    "chainId": 11,
    "nonce": 1,
    "signature": {
        "pubKey": "110ffd569daaee30068fc3c85922d1237f63a41d4749d464b883131e92369204",
        "signature": "7db4f4ce33abf89cbccaff96ae0651c79043dcf965893de71e7388163ec57883b2d4ef9bf264346ceff69f9ba8dfe8624d1fad9a452acf10a5d15f956a0a7b03"
    }
}
```

**ETH подпись**

{% tabs %}
{% tab title="Шаблон сообщения" %}

```csharp
Transfer {readableAmount} {tokenSymbol}
To: {to}
ChainId {chainId}
Nonce: {nonce}
Fee: {readableFee} {feeTokenSymbol}
Account Id: {accountId}
```

{% endtab %}

{% tab title="Пример сообщения" %}

```csharp
Transfer 1.0 ZKS
To: 0x961b513dfd3e363c238e0f98219ee02552a847bd
Chain Id: 11
Nonce: 1
Fee: 0.0 ZKS
Account Id: 1338
```

{% endtab %}

{% tab title="Подпись" %}

```csharp
{
    "type": "EthereumSignature",
    "signature": "0xbf8fa93e7da866aa3acb07a6a826e5e61195eba04e3c72a4f02b8fc8221da1f764363817968576013ca515ffe5e1104b5890937150883f3304d0738777af915b1c"
}
```

{% endtab %}
{% endtabs %}

### **Вывод**

**Поля транзакции**

| Bytes Order | **Field** | Type    | Bytes Length | Comment                                     | Bytes Example                                |
| ----------- | --------- | ------- | ------------ | ------------------------------------------- | -------------------------------------------- |
| 0           | type      | string  | 1            | Withdraw                                    | `0x03`                                       |
| 1           | accountId | number  | 4            | Your account ID.                            | `0x0000053a`                                 |
| 2           | from      | address | 20           | Your address.                               | `0x026a25efbcefb2e481d005e4f00ccced0af511ff` |
| 3           | to        | address | 20           | The target address you want to withdraw to. | `0x026a25efbcefb2e481d005e4f00ccced0af511ff` |
| 4           | token     | number  | 2            | The ID of the token you want to withdraw.   | `0x000a`                                     |
| 5           | amount    | string  | 16           | The amount you want to withdraw.            | `0x00000000000000000de0b6b3a7640000`         |
| 6           | feeToken  | number  | 1            | The ID of fee token.                        | `0x0a`                                       |
| 7           | fee       | string  | 2            |                                             | `0x4bf0`                                     |
| 8           | chainId   | number  | 1            | 11 for mainnet, 128 for ropsten.            | `0x0b`                                       |
| 9           | nonce     | number  | 4            | Your current nonce.                         | `0x00000002`                                 |
| -           | signature | object  |              | Contains your `pubKey` and signature.       |                                              |

**Пример Full Bytes**

```csharp
0x030000053a026a25efbcefb2e481d005e4f00ccced0af511ff026a25efbcefb2e481d005e4f00ccced0af511ff000a00000000000000000de0b6b3a76400000a4bf00b00000002
```

**Пример подписанной транзакции**

```csharp
{
    "type": "Withdraw",
    "accountId": 1338,
    "from": "0x026A25EfbcEFb2e481d005E4F00Ccced0AF511FF",
    "to": "0x026a25efbcefb2e481d005e4f00ccced0af511ff",
    "token": 10,
    "amount": "1000000000000000000",
    "feeToken": 10,
    "fee": "6070000000000000000",
    "chainId": 11,
    "nonce": 2,
    "signature": {
        "pubKey": "110ffd569daaee30068fc3c85922d1237f63a41d4749d464b883131e92369204",
        "signature": "68bb8413edc0182812aa90481ff46f0514df9d5d6b5703338f1a292682caad9b04cac623f95b9d26fa31d4a9330ba35b5746fd697853a0512f92b00692fe6d00"
    }
}
```

**ETH подпись**

{% tabs %}
{% tab title="Шаблон сообщения" %}

```csharp
Withdraw {readableAmount} {tokenSymbol}
To: {to}
ChainId {chainId}
Nonce: {nonce}
Fee: {readableFee} {feeTokenSymbol}
Account Id: {accountId}
```

{% endtab %}

{% tab title="Пример сообщения" %}

```csharp
Withdraw 3.4226556417 ZKS
To: 0x026a25efbcefb2e481d005e4f00ccced0af511ff
ChainId 10
Nonce: 2
Fee: 1.577 ZKS
Account Id: 83670
```

{% endtab %}

{% tab title="Подпись" %}

```csharp
{
    "type": "EthereumSignature",
    "signature": "0x0440667d6a694b76e5f3a51fa3981a3db95bfc7d3feeb301f403ea6f3bef01d32c9e06920f7b13edd92a6cb22f49d6709fb4f9d41efc09b0a094173b6bbb4f121b"
}
```

{% endtab %}
{% endtabs %}

### **Обмен**

#### **Комиссия**

Для примера обменяем токен А на токен В. Есть два способа:

1. Если А – это токен комиссии, то ее размер рассчитывается как `amountIn * 5 / 9995`
2. Если А не выступает в роли токена комиссии, а для комиссии применяется токен В, то ее размер `amountOut * 5 /10000`. Это не `amountOutMin`. `amountOut` равен `amountOutMin` и тогда проскальзывание равно 0.

#### **Поля транзакции**

| Bytes Order | **Field**    | Type    | Bytes Length | Comment                                   | Bytes Example                                |
| ----------- | ------------ | ------- | ------------ | ----------------------------------------- | -------------------------------------------- |
| 0           | type         | string  | 1            | Swap                                      | `0x0b`                                       |
| 1           | accountId    | number  | 4            | Your account ID.                          | `0x0000053a`                                 |
| 2           | from         | address | 20           | Your address.                             | `0x026a25efbcefb2e481d005e4f00ccced0af511ff` |
| 3           | to           | address | 20           | The pair's address.                       | `0xaa45c964e21eafb38574e9d000adbaf85acfbb80` |
| 4           | tokenIn      | number  | 2            | The ID of the token you want to swap in.  | `0x000a`                                     |
| 5           | amountIn     | string  | 5            | The amount you want to swap in.           | `0x94efe63009`                               |
| 6           | tokenOut     | number  | 2            | The ID of the token you want to swap out. | `0x0000`                                     |
| 7           | amountOutMin | string  | 5            | The minimum amount  you want to swap out. | `0x25004d47c6`                               |
| 8           | feeToken     | number  | 1            | The ID of fee token.                      | `0x0a`                                       |
| 9           | fee          | string  | 2            |                                           | `0x7d0d`                                     |
| 10          | chainId      | number  | 1            | 11 for mainnet, 128 for ropsten.          | `0x0b`                                       |
| 11          | nonce        | number  | 4            | Your current nonce.                       | `0x00000003`                                 |
| -           | signature    | object  |              | Contains your `pubKey` and signature.     |                                              |

**Пример Full Bytes**

```csharp
0x0b0000053a026a25efbcefb2e481d005e4f00ccced0af511ffaa45c964e21eafb38574e9d000adbaf85acfbb80000a94efe63009000025004d47c60a7d0d0b00000003
```

**Пример подписанной транзакции**

```csharp
{
    "type": "Swap",
    "accountId": 1338,
    "from": "0x026A25EfbcEFb2e481d005E4F00Ccced0AF511FF",
    "to": "0xaa45c964e21eafb38574e9d000adbaf85acfbb80",
    "tokenIn": 10,
    "tokenOut": 0,
    "amountIn": "19990000000000000000",
    "amountOutMin": "4966214206000000",
    "feeToken": 10,
    "fee": "10000000000000000",
    "chainId": 11,
    "nonce": 3,
    "signature": {
        "pubKey": "110ffd569daaee30068fc3c85922d1237f63a41d4749d464b883131e92369204",
        "signature": "3c6c2059ab0e929ed18d6ad4fbbf1cddce0e84b0cb9537069456b16cd01f33a2bc5391f8f7e1b9ae8fdff4c5d05856709e6bfd0e9200f5293386cf1aa6b39c00"
    }
}
```

**ETH подпись**

{% tabs %}
{% tab title="Шаблон сообщения" %}

```
Swap {readableAmontIn} {tokenInSymbol}
Minimum: {readableAmontOutMin} {tokenOutSymbol}
To: {pairAddress}
ChainId {chainId}
Nonce: {nonce}
Fee: {readableFee} {feeTokenSymbol}
Account Id: {accountId}
```

{% endtab %}

{% tab title="Пример сообщения" %}

```csharp
Swap 19.99 ZKS
Minimum: 0.004966214206 ETH
To: 0xaa45c964e21eafb38574e9d000adbaf85acfbb80
Chain Id: 11
Nonce: 3
Fee: 0.01 ZKS
Account Id: 1338
```

{% endtab %}

{% tab title="Подпись" %}

```csharp
{
    "type": "EthereumSignature",
    "signature": "0x66ca505f09e2dbd2aaaa809cac3ec7085ea7831ec58c695566190588a2ced45c0d7e1c235840dd3f547d54ad87e6740bb3d299a89d36460b9eb1e56b25456ef41b"
}
```

{% endtab %}
{% endtabs %}

**Добавление ликвидности**

**Поля транзакции**

| Bytes Order | **Field**      | Type    | Bytes Length | Comment                                                    | Bytes Example                                |
| ----------- | -------------- | ------- | ------------ | ---------------------------------------------------------- | -------------------------------------------- |
| 0           | type           | string  | 1            | AddLiquidity                                               | `0x09`                                       |
| 1           | accountId      | number  | 4            | Your account ID.                                           | `0x0000053a`                                 |
| 2           | from           | address | 20           | Your address.                                              | `0x026a25efbcefb2e481d005e4f00ccced0af511ff` |
| 3           | to             | address | 20           | The pair's address.                                        | `0xaa45c964e21eafb38574e9d000adbaf85acfbb80` |
| 4           | tokenA         | number  | 2            | The ID of token A.                                         | `0x0000`                                     |
| 5           | amountADesired | number  | 5            | The amount of token A you want to add to the pair.         | `0xc2cf6f3245`                               |
| 6           | amountAMin     | string  | 5            | The minimum amount of Token A you want to add to the pair. | `0xb911dcd625`                               |
| 7           | tokenB         | number  | 2            | The ID of the token B.                                     | `0x000a`                                     |
| 8           | amountBDesired | string  | 5            | The amount of token B you want to add to the pair.         | `0x4a817c8009`                               |
| 9           | amountBMin     | string  | 5            | The minimum amount of Token B you want to add to the pair. | `0x46c7cfe009`                               |
| 10          | tokenLiquidity | number  | 2            | The pair ID.                                               | `0x4002`                                     |
| 11          | feeToken       | number  | 1            | The ID of fee token.                                       | `0x0a`                                       |
| 12          | fee            | string  | 2            |                                                            | `0x0000`                                     |
| 13          | chainId        | number  | 1            | 11 for mainnet, 128 for ropsten.                           | `0x0b`                                       |
| 14          | nonce          | number  | 4            | Your current nonce.                                        | `0x00000004`                                 |
| -           | signature      | object  |              | Contains your `pubKey` and signature.                      |                                              |

**Пример Full Bytes**

```csharp
0x090000053a026a25efbcefb2e481d005e4f00ccced0af511ffaa45c964e21eafb38574e9d000adbaf85acfbb800000c2cf6f3245b911dcd625000a4a817c800946c7cfe00940020a00000b00000004
```

**Пример подписанной транзакции**

```c
{
    "type": "AddLiquidity",
    "accountId": 1338,
    "from": "0x026A25EfbcEFb2e481d005E4F00Ccced0AF511FF",
    "to": "0xaa45c964e21eafb38574e9d000adbaf85acfbb80",
    "tokenA": 0,
    "tokenB": 10,
    "tokenLiquidity": 16386,
    "amountADesired": "2614699457800000",
    "amountBDesired": "10000000000000000000",
    "amountAMin": "2483964484900000",
    "amountBMin": "9500000000000000000",
    "feeToken": 10,
    "fee": "0",
    "chainId": 11,
    "nonce": 4,
    "signature": {
        "pubKey": "110ffd569daaee30068fc3c85922d1237f63a41d4749d464b883131e92369204",
        "signature": "3506a865b8a0871b706a620abbf7978760f76670c2d563f059d217890349988dd7a37d1cea3f67d5ca691453dd45d282141acac3f4dafb9f7a44b1dda3e0ca00"
    }
}
```

**ETH подпись**

{% tabs %}
{% tab title="Шаблон сообщения" %}

```c
AddLiquidity {pairSymbol}
Desired: {readableAmontA} {tokenASymbol} {readableAmontB} {tokenBSymbol}
Minimum: {readableAmontAMin} {tokenASymbol} {readableAmontBMin} {tokenBSymbol}
To: {pairAddress}
ChainId {chainId}
Nonce: {nonce}
Fee: {readableFee} {feeTokenSymbol}
Account Id: {accountId}
```

{% endtab %}

{% tab title="Пример сообщения" %}

```c
AddLiquidity liquidity_0_10
Desired: 0.0026146994578 ETH 10.0 ZKS
Minimum: 0.0024839644849 ETH 9.5 ZKS
To: 0xaa45c964e21eafb38574e9d000adbaf85acfbb80
Chain Id: 11
Nonce: 4
Fee: 0.0 ZKS
Account Id: 1338
```

{% endtab %}

{% tab title="Подпись" %}

```c
{
    "type": "EthereumSignature",
    "signature": "0x20c1c26e8f678220189f0a4a444e1686e969faa536a17abc1a30a113d6e4bfc12aa88a2075693857ea410f439d28467b01666bcb01d1b6bb7b8ce3641bd6daea1b"
}
```

{% endtab %}
{% endtabs %}

**Удаление ликвидности**

**Поля транзакции**

| Bytes Order | **Field**       | Type    |    | Comment                                                         | Bytes Examplle                               |
| ----------- | --------------- | ------- | -- | --------------------------------------------------------------- | -------------------------------------------- |
| 0           | type            | string  | 1  | RemoveLiquidity                                                 | `0x0a`                                       |
| 1           | accountId       | number  | 4  | Your account ID.                                                | `0x0000053a`                                 |
| 2           | from            | address | 20 | Your address.                                                   | `0x026a25efbcefb2e481d005e4f00ccced0af511ff` |
| 3           | to              | address | 20 | The pair's address.                                             | `0xaa45c964e21eafb38574e9d000adbaf85acfbb80` |
| 4           | tokenA          | number  | 2  | The ID of token A.                                              | `0x0000`                                     |
| 5           | amountAMin      | string  | 5  | The minimum amount of Token A you want to remove from the pair. | `0xb96855c485`                               |
| 6           | tokenB          | number  | 2  | The ID of the token B.                                          | `0x000a`                                     |
| 7           | amountBMin      | string  | 5  | The minimum amount of Token B you want to remove from the pair. | `0x46a6e21049`                               |
| 8           | feeToken        | number  | 1  | The ID of fee token.                                            | `0x0a`                                       |
| 9           | fee             | string  | 2  |                                                                 | `0x0000`                                     |
| 10          | tokenLiquidity  | number  | 2  | The pair ID.                                                    | `0x4002`                                     |
| 11          | amountLiquidity | string  | 5  | The amount of LP token you want to remove.                      | `0x77e80cdba7`                               |
| 12          | chainId         | number  | 2  | 11 for mainnet, 128 for ropsten.                                | `0x0b`                                       |
| 13          | nonce           | number  | 4  | Your current nonce.                                             |                                              |
| -           | signature       | object  |    | Contains your `pubKey` and signature.                           |                                              |

**Пример Full Bytes**

```c
0x0a0000053a026a25efbcefb2e481d005e4f00ccced0af511ffaa45c964e21eafb38574e9d000adbaf85acfbb800000b96855c485000a46a6e210490a0000400277e80cdba70b00000005
```

**Пример подписанной транзакции**

```c
{
    "type": "RemoveLiquidity",
    "accountId": 1338,
    "from": "0x026A25EfbcEFb2e481d005E4F00Ccced0AF511FF",
    "to": "0xaa45c964e21eafb38574e9d000adbaf85acfbb80",
    "tokenA": 0,
    "tokenB": 10,
    "amountAMin": "2488498128400000",
    "amountBMin": "9482735746000000000",
    "tokenLiquidity": 16386,
    "amountLiquidity": "160935707810000000",
    "feeToken": 10,
    "fee": "0",
    "chainId": 11,
    "nonce": 5,
    "signature": {
        "pubKey": "110ffd569daaee30068fc3c85922d1237f63a41d4749d464b883131e92369204",
        "signature": "bf0e5c3639e9f9f837e2d141fa9481da8e11574001dbe8cd81cb3005c9cac69ae05655d416cd53bedd27142235ad5743e9f26b66ac8643d859d0c8caf149a700"
    }
}
```

**ETH подпись**

{% tabs %}
{% tab title="Шаблон сообщения" %}

```c
RemoveLiquidity {readableLiquidityAmount} {pairSymbol}
Minimum: {readableAmontAMin} {tokenASymbol} {readableAmontBMin} {tokenBSymbol}
To: {pairAddress}
ChainId {chainId}
Nonce: {nonce}
Fee: {readableFee} {feeTokenSymbol}
Account Id: {accountId}
```

{% endtab %}

{% tab title="Пример сообщения" %}

```c
RemoveLiquidity 0.16093570781 liquidity_0_10
Minimum: 0.0024884981284 ETH 9.482735746 ZKS
To: 0xaa45c964e21eafb38574e9d000adbaf85acfbb80
Chain Id: 11
Nonce: 5
Fee: 0.0 ZKS
Account Id: 1338
```

{% endtab %}

{% tab title="Подпись" %}

```c
{
    "type": "EthereumSignature",
    "signature": "0x85ce1409808a56b4522b6787d397d4b5d04a926e701a72b1388fff74f447650b1789c6bb7487b638bb1f6100faaa318b37311d831f07252bd0971331e61b8ad51b"
}
```

{% endtab %}
{% endtabs %}


# v1


# RESTful API

&#x20;**Получить адрес контракта**![](/files/-MjDTCmqIkE1RbDnfqwM)

<https://api.zks.ap&#x70;**/:network/contract-address>\*\*

Возвращает контракты, используемые для депозита и т.д. В большинстве случаев ответ не меняется.

![](/files/-MjDTCmrC-ys9hw_YORM)

![](/files/-MjDTCmsVnjxCbvkAlqv) **Получить список токенов**

<https://api.zks.ap&#x70;**/:network/tokens>\*\*

Возвращает все токены, которые залистились на ZKSwap.

![](/files/-MjDTCmtfC_joHjv0qF_)

Ниже представлена схема для одного из токенов.

![](/files/-MjDTCmuwo77rLmlypx4)

![](/files/-MjDTCmvzWBmjUBNiveE) **Получить цены токенов**

<https://api.zks.ap&#x70;**/:network/tokens/price>\*\*

Возвращает все цены токенов с ZKSwap.

![](/files/-MjDTCmw4teQZ32zst-N)

![](/files/-MjDTCmxhJyVt4H0_xnQ) **Получить список торговых пар**

<https://api.zks.ap&#x70;**/:network/pairs>\*\*

Возвращает все торговые пары, которые были добавлены на ZKSwap.

![](/files/-MjDTCmyWdN-ht1nMr13)

![](/files/-MjDTCmzcGF_gCrr1Dhn) **Получить цены торговых пар**

<https://api.zks.ap&#x70;**/:network/pairs/price>\*\*

Возвращает цены всех торговых пар с ZKSwap.

![](/files/-MjDTCn-UnaBGk3j1iun)

![](/files/-MjDTCn0B0jCOOFHhZfJ) **Получить баланс учётной записи**

<https://api.zks.ap&#x70;**/:network/account/:address/balances>\*\*

Возвращает баланс указанного адреса. Если по адресу нет токена/пары, то баланс не будет возвращен. Все стоимости активов указаны в USD.

![](/files/-MjDTCn11FgQjA9k9eAL)

![](/files/-MjDTCn2AbJc1SUdXEcr) **Получить информацию об учётной записи**

<https://api.zks.ap&#x70;**/:network/account/:address/info>\*\*

Возвращает id, nonce и pubKeyHash учетной записи. Если у учетной записи нет никаких активов на ZKSwap, то id будет 0.

![](/files/-MjDTCn35iHQmHdrqPbW)

![](/files/-MjDTCn4xdlr2tCkE8a-) **Получить комиссии учётной записи**

<https://api.zks.ap&#x70;**/:network/account/:address/fee>\*\*

![](/files/-MjDTCn5A_bhVGLL5_B5)

![](/files/-MjDTCn6KmAhisGv-n-R) **Получить список транзакций**

<https://api.zks.ap&#x70;**/:network/txs>\*\*

Возвращает список транзакций.

![](/files/-MjDTCn7aqtz6T9w2_6B)

Каждая транзакция содержит следующие поля:

![](/files/-MjDTCn80TnkniJa0RS-)

![](/files/-MjDTCn98vNr2jXYd3dE) **Получить транзакцию**

<https://api.zks.ap&#x70;**/:network/tx/:tx\\_hash>\*\*

Возвращает данные транзакции.

![](/files/-MjDTCnAN6wWFX1-6Jmy)

&#x20;**Отправить транзакцию**![](/files/-MjDTCnBqD83CpHGs6bD)

<https://api.zks.ap&#x70;**/:network/tx>\*\*

Отправляет транзакцию на Layer-2 в ZKSwap. Возвращает хэш транзакции, если она была принята.

![](/files/-MjDTCnCK7oXhVljGRsd)


# Создание транзакции

В данной статье мы будем использоваться этот кошелек для примера:

![](/files/-MjDTQVVo1Q-Y9EDrR_X)

**Уровень-1 (Layer-1)**

Единственная транзакция, которая совершается на Уровне-1 – это депозит. Она имеет два подтипа DepositETH и DepositERC20.

**ABIs**

![](/files/-MjDTQVWz0Uje3X9-XG2)

**Депозит ETH**

Пример кода:

![](/files/-MjDTQVX_CjQOubVnHGP)

**Депозит ERC20**

Как и в других проектах вы должны подтвердить основной адрес контракта ZKSwap, чтобы внести свои токенты ERC20 на депозит. Будьте осторожны с токенами, у которых есть ограничения (Подробнее см. [здесь](https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729)).

Пример кода:

![](/files/-MjDTQVYw9f-iqBZAoYj)

**Уровень-2**

При отправке транзакции на ZKSwap через API необходимо заполнить три поля: tx, signature и fastProcessing.


