• Руководство пользователя
    • Заметки о безопасности
      Заметки о безопасности
    • Online/Desktop приложения
      • Управление аккаунтом
        • Создать аккаунт
          Создать аккаунт
        • Войти в аккаунт
          Войти в аккаунт
        • Восстановить аккаунт
          Восстановить аккаунт
        • Узнать свой адрес Waves.Exchange
          Узнать свой адрес Waves.Exchange
        • Создать персональный алиас
          Создать персональный алиас
        • Импорт из Waves Keeper
          Импорт из Waves Keeper
        • Использовать устройства Legder Nano
          Использовать устройства Legder Nano
        Управление аккаунтом
      • Управление ассетами
        • Перевести криптовалюту
          • Транзакции
            Транзакции
          Перевести криптовалюту
        • Купить криптовалюту с помощью банковской карты
          • Как работать с платежной системой Advanced Cash
            Как работать с платежной системой Advanced Cash
          Купить криптовалюту с помощью банковской карты
        • Управление Neutrino
          Управление Neutrino
        • Передать в стейкинг
          • Услуга OTC
            Услуга OTC
          • Своп WAVES/USDN
            Своп WAVES/USDN
          • Как получить USDN (Quick Guide)
            Как получить USDN (Quick Guide)
          • Как получить USDT (Quick Guide)
            Как получить USDT (Quick Guide)
          Передать в стейкинг
        • Своп DeFo
          Своп DeFo
        • Neutrino пулы
          Neutrino пулы
        • Создать ассет
          Создать ассет
        • Разослать ассет
          Разослать ассет
        • Перевыпустить ассет
          Перевыпустить ассет
        • Поменять перевыпускаемый на не перевыпускаемый
          Поменять перевыпускаемый на не перевыпускаемый
        • Сжечь ассет
          Сжечь ассет
        • Спонсорская транзакция
          Спонсорская транзакция
        • Спонсорская комиссия
          Спонсорская комиссия
        Управление ассетами
      • Расширенные возможности
        • Script транзакции
          Script транзакции
        • JSON подтверждение
          JSON подтверждение
        Расширенные возможности
      • Торговля на бирже
        Торговля на бирже
      • Левередж
        Левередж
      Online/Desktop приложения
    • Мобильные приложения
      • Управление аккаунтом
        • Создать аккаунт
          Создать аккаунт
        • Войти в аккаунт
          Войти в аккаунт
        • Восстановить аккаунт
          Восстановить аккаунт
        • Узнать свой адрес Waves.Exchange
          Узнать свой адрес Waves.Exchange
        • Создать персональный алиас
          Создать персональный алиас
        Управление аккаунтом
      • Управление ассетами
        • Перевести криптовалюту
          Перевести криптовалюту
        • Купить криптовалюту с помощью банковской карты
          Купить криптовалюту с помощью банковской карты
        • Передать WAVES в стейкинг
          Передать WAVES в стейкинг
        • Передать USDN в стейкинг
          Передать USDN в стейкинг
        • Сжечь ассет
          Сжечь ассет
        Управление ассетами
      • Торговля на бирже
        Торговля на бирже
      Мобильные приложения
    Руководство пользователя
  • API и библиотека
    • CCXT
      CCXT
    • Комиссии
      Комиссии
    • API платежей
      API платежей
    • API авторизации
      API авторизации
    • API шлюза
      • Токен доступа
        • Получить токен в интерфейсе
          Получить токен в интерфейсе
        • POST /v1/oauth2/token
          POST /v1/oauth2/token
        Токен доступа
      • Внесение средств
        • GET /v1/deposit/addresses/{currency}
          GET /v1/deposit/addresses/{currency}
        • GET /v1/deposit/currencies
          GET /v1/deposit/currencies
        • GET /v1/deposit/currencies/{currency}
          GET /v1/deposit/currencies/{currency}
        • Terms of Deposit
          Terms of Deposit
        Внесение средств
      • Вывод средств
        • GET /v1/withdraw/addresses/{currency}/{address}
          GET /v1/withdraw/addresses/{currency}/{address}
        • GET /v1/withdraw/currencies
          GET /v1/withdraw/currencies
        • GET /v1/withdraw/currencies/{currency}
          GET /v1/withdraw/currencies/{currency}
        • Условия вывода
          Условия вывода
        Вывод средств
      • История операций
        История операций
      • Список платформ
        Список платформ
      • Проверка соответствия балансов
        Проверка соответствия балансов
      • Коды ошибок
        Коды ошибок
      API шлюза
    • Матчер
      • Протокол Waves.Exchange
        Протокол Waves.Exchange
      • Комиссия матчера
        Комиссия матчера
      • Установка матчера на Ubuntu из Deb-пакета
        Установка матчера на Ubuntu из Deb-пакета
      • Настройки матчера
        Настройки матчера
      • API Матчера
        • Правила валидации ордера
          Правила валидации ордера
        • Правила валидации ExchangeTransaction
          Правила валидации ExchangeTransaction
        API Матчера
      Матчер
    API и библиотека
  • Глоссарий
    Глоссарий
      • English
      • Русский
      On this page
        • Объекты
          • Asset
          • Asset Pair
          • Order
          • Order Book
          • Tick Size
          • Exchange Transaction
        • API Методы
          • Place Limit Order
          • Place Market Order
          • Cancel Order
          • Get Order Status
          • Get Order History by Public Key
          • Get Order History by Asset Pair and Public Key
          • Get All Order History by Address
          • Get Order by ID and Address
          • Get Order by ID and Public Key
          • Get Tradable Balance
          • Get Order Book
          • Get Order Book Info
          • Get Market Status
          • Get Rates
          • Get Matcher Settings
          • Get Matcher Public Key
          • Get Current Offset
          • Get Last Offset
          • Get Oldest Snapshot Offset
          • Get All Snapshot Offsets
          • Save Snapshots
          • Reserved Balance
          • Delete Order Book
          • Get Transactions By Order
          • Force Cancel Order
          • Upsert Rate
          • Delete Rate
        • SDK

          # Матчер API

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

          Матчер предоставляет собственный REST API для отправки ордеров и доступа к книге ордеров. Это позволяет реализовывать торговые интерфейсы и торговых ботов.

          Назначением децентрализованного обмена (Waves.Exchange, также известного как Matcher) является безопасный обмен активами, выпущенными на блокчейне Waves. Когда пользователь отправляет ордер матчеру, он не передает права собственности на свои активы кому-либо, его деньги остаются на его счете до тех пор, пока ордер не будет сопоставлен со встречным ордером. Матчер создает ExchangeTransaction, в то время как блокчейн гарантирует, что транзакция будет выполняться на условиях не хуже, чем заявлены в ордере. После подтверждения транзакции в блокчейне баланс активов учетной записи пользователя изменяется в соответствии с суммой, ценой исполнения ордера и комиссией за матчинг.

          Matcher API для Mainnet и Testnet:

          • Mainnet Matcher API (opens new window)
          • Testnet Matcher API (opens new window)

          # Объекты

          Вот основные объекты, с которыми работает матчер:

          • Asset
          • Asset Pair
          • Order
          • Order Book
          • Exchange transaction

          # Asset

          У каждого ассета, кроме WAVES, есть ID.

          decimals количество знаков после запятой ассета:

          • используя метод GET /assets/details/{assetId} из Node API (opens new window)
          • нажать на asset ID на странице Trading в интерфейсе Waves.Exchange (opens new window).

          В представлении JSON количество активов умножается на 10^decimals, поэтому это всегда целочисленное значение. Например, decimals WAVES это 8, поэтому реальная сумма умножается на 10 10^8. { "WAVES": 677728840 } что означает 6.77728840 WAVES.

          # Asset Pair

          Пара ассетов содержит два ассета ордера.

          Пример:

          "assetPair": {
            "amountAsset": "4LHHvYGNKJUg5hj65aGD5vgScvCBmLpdRFtjokvCjSL8",
            "priceAsset": "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS"
          }
          
          Имя поля Описание
          amountAsset ID первого ассета, который отправитель ордера хочет купить или продать. WAVES, или null, или пропущенное поле означает WAVES
          priceAsset ID второго ассета с помощью которго определяется цена ордера. WAVES, или null, или пропущенное поле означает WAVES

          Пара ассетов существует независимо от того, какой ассет «потрачен», а какой «получен».

          Для каждой пары ассетов существует ровно один соответствующий order book.

          # Какой ассет пары выбрать в качестве ценового актива?

          Смотрите список priceAssets получаемый с помощью API метода GET /matcher/settings.

          1. Если оба ассета находятся в списке priceAssets, то тот, который стоит первым в списке, является ценовым ассетом.
          2. Если в списке присутствует только один ассет, этот ассет является ценовым активом.
          3. Если обоих активов нет в списке, их ID в байтовом представлении должны быть отсортированы лексикографически: первый (наименьший) является ценовым ассетом, а второй - ассетом суммы.

          # Order

          Ордер - это инструкция на покупку или продажу актива на Waves.Exchange.

          Вы можете отправлять Limit или Market Order используя разные API методы. Структуры JSON лимитных и рыночных ордеров одинаковы.

          Для Limit и Market ордеров, Матчер пытается продать или купить заданное количество ассетов по цене равной или лучше заданной.

          Если лимитный ордер не может быть полностью заполнен встречными ордерами, сопоставленными по цене, он будет частично заполнен и помещен в соответствующую книгу ордеров. Размещенный ордер будет активен в книге ордеров максимум 30 дней, пока он не будет полностью заполнен встречными ордерами или отменен отправителем.

          В маркет ордере отправитель должен указать максимальную цену на покупку и минимальную цену на продажу из соответствующей книги ордеров. Если указанной цены достаточно, чтобы полностью выполнить ордер по встречным ордерам, сопоставленным с ценой, он будет выполнен по лучшей цене. Если указанной цены недостаточно для полного заполнения ордера, он будет отклонен. Но если во всех встречных ордерах не будет достаточного количества актива, он будет заполнен частично. Маркет ордер не имеет максимальной продолжительности. При размещении маркет ордер сопоставляется со встречными ордерами до тех пор, пока он не достигнет указанного количества активов, или у отправителя не закончится доступный баланс. Завершенные маркет ордеры удаляются из книги ордеров.

          Пример ордера версии 3:

          {
            "version": 3,
            "id": "H3oBpc7phuaMQGM3sgnrcYNyb12DSgJi44ksgEt1vJMT",
            "sender": "3P3ks3wvEySmUAu4JCk2aELfLaaENxCAdw1",
            "senderPublicKey": "6JBcXLr61Tx133i1KRjg31vLNMv6fcuhm1ufN2zAB19N",
            "matcherPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
            "assetPair": {
              "amountAsset": "4LHHvYGNKJUg5hj65aGD5vgScvCBmLpdRFtjokvCjSL8",
              "priceAsset": "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS"
            },
            "orderType": "buy",
            "amount": 997736917,
            "price": 707,
            "timestamp": 1575983051927,
            "expiration": 1578488651926,
            "matcherFee": 13,
            "matcherFeeAssetId": "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS",
            "signature": "aC76moJRWszKc1u9k9sQtcDWnHtfDh6ZNjoUVqSD3uMXnfFy1rcwhJVDTWQwGqGUKgNYbqPagZVyingRNQ6Gq3L",
            "proofs": [
              "aC76moJRWszKc1u9k9sQtcDWnHtfDh6ZNjoUVqSD3uMXnfFy1rcwhJVDTWQwGqGUKgNYbqPagZVyingRNQ6Gq3L"
            ]
          }
          
          Имя поля Описание
          version Версия ордера. Должно быть 3. V1 и V2 устарели
          id ID ордера
          sender Адрес отправителя ордера в Base58
          senderPublicKey Публичный ключ отправителя ордера в Base58, относящийся к адресу отправки/получения ассетов
          matcherPublicKey Публичный ключ матчера в Base58, которому пользователь авторизовал матчинг своего ордера. Используйте API метод GET /matcher, чтобы получить публичны ключ матчера
          assetPair Asset pair ордера. Ордер будет помещён в соответствующую книгу ордеров
          orderType Тип ордера: "buy" или "sell"
          amount Сумма amountAsset умноженная на 10^amountAssetDecimals. Подробнее - Asset
          price Цена за amountAsset деноминированная в priceAsset и умноженная на 10^(8 + priceAssetDecimals – amountAssetDecimals).
          Например, в паре ассетов ETH/WAVES цена 1,250,000,000 означает, что 1 ETH стоит 125 WAVES (PriceAssetDecimals и AmountAssetDecimals оба равны 8).
          timestamp Unix time (opens new window) создания ордера, в миллисекундах. Используется как одноразовый номер для ордера.
          expiration Unix time в миллисекундах срок действия ордера. Должен быть больше 1 минуты и меньше 1 месяца от текущего времени. Note: Матчер синхронизируется с NTP (opens new window). Если вы не синхронизированы, матчер может отклонить ордер с ошибкой, потому что разница во времени составляет менее 1 минуты или более 1 месяца
          matcherFee Комиссия матчера. Подробнее - Matcher Fee
          matcherFeeAssetId Ассет комиссии. Если Waves то задавать не нужно (или используйте значение null)
          signature Подпись отправителя ордера. Первый элемент массива proofs автоматически задаётся в поле
          proofs Пруфы валидации ордера. Используйте Curve25519 (opens new window) для получения пруфа. Пример (opens new window) в WavesJ библиотеке

          Note:

          • Ордер version 2 не поддерживает поле matcherFeeAssetId. Комиссия матчера только в WAVES.
          • Ордер version 1 не поддерживает поля matcherFeeAssetId и proofs.

          Также читайте: Валидация ордера

          # Лимит ордер

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

          Покупка: цена <= заданная цена Продажа: цена >= заданная цена

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

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

          # Маркет ордер

          Маркет ордер имеет поле цена и сумма:

          • Цена - устанавливает лимит цены, по которой можно продавать или покупать (в зависимости от типа ордера)
          • Сумма - максимальное количество ассетов для продажи / покупки

          Этот вид ордера сопоставляется с другими ордерами, и обменные операции выполняются вплоть до того, как:

          • (1) указанная сумма ассетов достигнута
          • (2) у пользователя больше нет расходного баланса
          • (3) по указанному ценовому лимиту больше нет совпадающих ордеров

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

          Проверки маркет ордера:

          1. Цена:

            • В соответствии с текущим снепшотом книги ордеров производится проверка того, что указанная в ордере цена позволяет выполнить (купить или продать) весь объем ордера.
            • Если всех ордеров в книге не достаточно для полного выполнения, ордер по-прежнему принимается
          2. Доступный баланс:

            При размещении маркет ордера к нему применяется ослабленная проверка доступного баланса. Нет необходимости запрашивать всю стоимость ордера: цена*сумма, потому что матчинг может происходить по лучшим ценам. В соответствии с текущим снепшотом книги ордеров, рассчитывается стоимость ордера в активе цены (для ПОКУПКИ) или доступный объем ордера в активе суммы (для ПРОДАЖИ). После этого доступный баланс требуется на основе рассчитанных значений.

          # Order Book

          Книга ордеров - это список ордеров заданной данной пары активов.

          Пример:

          {
            "timestamp": 1576143739568,
            "pair": {
              "amountAsset": "4vSJeAji4F7swJazJdZWau9drG1RjFL8QKSx13F7RjKQ",
              "priceAsset": "WAVES"
            },
            "bids": [
              {
                "amount": 10000000000000,
                "price": 41
              },
              {
                "amount": 2500000000000,
                "price": 40
              },
              {
                "amount": 300000000000000,
                "price": 1
              }
            ],
            "asks": [
              {
                "price": 50,
                "amount": 50000000000
              },
              {
                "amount": 2500000000000,
                "price": 51
              }
            ]
          }
          
          Имя поля Описание
          timestamp Unix time в миллисекундах.
          pair Asset pair
          bids Список уровней открытых buy ордеров, каждый уровень представлен в виде цены и суммы всех сумм ордеров по этой цене. Список отсортирован по цене в порядке убывания
          asks Список уровней открытых sell ордеров, отсортированных по цене в порядке возрастания

          # Tick Size

          Уровни ордеров для пары активов определяются на основе tick size - это минимальное ценовое движение пары активов.

          Цена в ордере на покупку округляется до tick size. Например, если tick size равен 0,1, ордер на покупку с ценой 125,37 выставляется на уровень с ценой 125,3.

          Цена в ордере на продажу округляется до tick size. Например, если размер тика равен 0,1, ордер на продажу с ценой 125,62 выставляется на уровень с ценой 125,7.

          Чтобы получить tick size для заданной пары используйте API метод GET /matcher/orderbook/{amountAsset}/{priceAsset}/info.

          # Exchange Transaction

          Exchange Transaction создается матчером при исполнении ордера. Транзакция подписывается закрытым ключом матчера и отправляется в сеть Waves для включения в блокчейн.

          Пример:

          {
            "senderPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
            "amount": 99434230,
            "fee": 300000,
            "type": 7,
            "version": 2,
            "sellMatcherFee": 298302,
            "sender": "3PEjHv3JGjcWNpYEEkif2w8NXV4kbhnoGgu",
            "feeAssetId": null,
            "proofs": [
              "62N8HzSjZ1XVYLqbVnruei4JGWjXzF36Lyhue8Ytb3YFbP2cQBiKTcWE8AvZyyVfwDrPvmS1ZXnA8Es99Lv3X8x"
            ],
            "price": 707,
            "id": "EJ4VD4kCTS4ZHjG3AJ6reEfzBuCgkZFn5nuLnf97bjTQ",
            "order2": {
              ...
            },
            "order1": {
              ...
            },
            "buyMatcherFee": 1,
            "timestamp": 1575986151520,
            "height": 1833113
          }
          
          Имя поля Описание
          senderPublicKey Публичный ключ отправителя (матчера) транзакции в Base58
          amount Сумма выполненного ордера amountAsset умноженная на 10^amountAssetDecimals соответствующая обоим ордерам
          fee Комиссия за транзакцию, включенную в блок майнером. Платится аккаунтом матчера
          type ID типа транзакции: 7
          version Версия транзакции. Должна быть 2. V1 устарела. Блокчейн должен поддерживать Smart Account Trading (feature 10)
          sellMatcherFee Комиссия за матчинг sell ордера. Отправляется на баланс аккаунта матчера - Matcher Fee
          sender Адрес отправителя (матчера) в Base58
          feeAssetId null означает WAVES
          proofs Пруфы для валидации транзакции
          price Цена за amountAsset деноминированная в priceAsset и умноженная на 10^(8 + priceAssetDecimals – amountAssetDecimals)
          id ID транзакции
          order2 Sell ордер данной транзакции
          order1 Buy ордер данной транзакции
          buyMatcherFee Комиссия за матчинг buy ордера. Отправляется на баланс аккаунта матчера - Matcher Fee
          timestamp Метка времени создания транзакции
          height Высота блока, в который включена транзакция. Это поле автоматически добавляет API ноды.

          Также читайте: Правила валидации ExchangeTransaction

          # API Методы

          • Place Limit Order
          • Place Market Order
          • Cancel Order
          • Get Order Status
          • Get Order History by Public Key
          • Get Order History by Asset Pair and Public Key
          • Get All Order History by Address
          • Get Order by ID and Address (X-API-Key)
          • Get Order by ID and Public Key (Signature)
          • Get Tradable Balance
          • Get Order Book
          • Get Order Book Info
          • Get Market Status
          • Get Rates
          • Get Matcher Settings
          • Get Matcher Public Key
          • Get Current Offset
          • Get Last Offset
          • Get Oldest Snapshot Offset
          • Get All Snapshot Offsets
          • Save Snapshots
          • Reserved Balance
          • Delete Order Book
          • Get Transactions By Order
          • Force Cancel Order
          • Upsert Rate
          • Delete Rate

          # Place Limit Order

          Размещает новый лимитный ордер (покупка или продажа).

          POST /matcher/orderbook
          

          Запрос содержит JSON представление ордера.

          Пример ответа:

          {
            "success": true,
            "message": {
              "version": 3,
              "id": "FvwtRb62aCTqMo7R73xMZDMVLbyS949Gw1FdE3rp1a4W",
              "sender": "3P8pGyzZL9AUuFs9YRYPDV3vm73T48ptZxs",
              "senderPublicKey": "FuChbN7t3gvW5esgARFytKNVuHSCZpXSYf1y3eDSruEN",
              "matcherPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
              "assetPair": {
                "amountAsset": "4LHHvYGNKJUg5hj65aGD5vgScvCBmLpdRFtjokvCjSL8",
                "priceAsset": "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS"
              },
              "orderType": "buy",
              "amount": 997736917,
              "price": 707,
              "timestamp": 1575983051927,
              "expiration": 1578488651926,
              "matcherFee": 13,
              "matcherFeeAssetId": "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS",
              "signature": "3djG8HHtmuwp3RtuC1MSEiZQdFMNsxwmMmUysHLHYAyybRdTx7Un4BMgWf6dGznw7pnjeE6pBhNKinr2YfGFLPpN",
              "proofs": [
                "3djG8HHtmuwp3RtuC1MSEiZQdFMNsxwmMmUysHLYAyybRdTx7Un4BMgWf6dGznw7pnjeE6pBhNKinr2YfGFLPpN"
              ]
            },
            "status": "OrderAccepted"
          }
          

          Для успешно размещенного ордера, поле success всегда true, а поле status всегда OrderAccepted.

          # Place Market Order

          Размещает новый маркет ордер (покупка или продажа).

          POST /matcher/orderbook/market
          

          Запрос содержит JSON представление ордера.

          Ответ такой же как в Place Limit Order.

          Для успешно размещенного ордера, поле success всегда true, а поле status всегда OrderAccepted.

          # Cancel Order

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

          # Cancel a Single Order

          POST /matcher/orderbook/{amountAsset}/{priceAsset}/cancel
          
          {
            "sender": "string",
            "orderId": "string",
            "signature": "string"
          }
          

          Параметры запроса:

          Имя поля Описание
          amountAsset ID первого ассета в паре, или WAVES
          priceAsset ID второго ассета в паре, или WAVES
          sender Публиичный ключ отправителя ордера в Base58, относящийся к адресу отправки/получения ордера
          orderId ID принятого ордера, который отправитель хочет отменить
          signature Curve25519 (opens new window) подпись отправителя [байты публичного ключа отправителя объединённые с байтами ID ордера]. Пример (opens new window) в WavesJ библиотеке

          Пример запроса:

          {
            "sender": "GHdnRxFWaMS7Wn39V1QneBe1N2WeovrbAYJ6ZRuXnuCc",
            "orderId": "2vs2ZqcdNfpoNSZfpBmtmJ2MBdYvjfS2s6Y4QuZNFsin",
            "signature": "3qE4ByvZTEPURVejNatVbBumCwAXTtquGRWmLaBjDs3WYc2u2CCUJNsF6BEZkYLtzsbncd1Qe4MKF5BdaKKNy6ed"
          }
          

          Пример ответа:

          {
            "orderId": "2vs2ZqcdNfpoNSZfpBmtmJ2MBdYvjfS2s6Y4QuZNFsin",
            "success": true,
            "status": "OrderCanceled"
          }
          

          # Cancel All the Orders for the Specified Asset Pair

          POST /matcher/orderbook/{amountAsset}/{priceAsset}/cancel
          
          {
            "sender": "string",
            "timestamp": long,
            "signature": "string"
          }
          

          Параметры запроса:

          Имя поля Описание
          amountAsset ID первого ассета в паре, или WAVES
          priceAsset ID второго ассета в паре, или WAVES
          sender Публиичный ключ отправителя ордера в Base58, относящийся к адресу отправки/получения ордера
          timestamp Unix time в миллисекундах. Используется как одноразовый номер
          signature Curve25519 (opens new window) подпись отправителя [байты публичного ключа отправителя объединённые с timestamp байтами в big-endian (opens new window) представлении]. Пример (opens new window) в WavesJ библиотеке.

          Пример запроса:

          {
            "sender": "5iePe4u2dHiRsAUeYjq83qpQoe7eKVeTxpLxYjFak8yQ",
            "timestamp": 1576684813260,
            "signature": "hZF8AQnaXkZwm5tAwdEA86k34AaZh82PjPexoQD9EPeejSAXMck8J4Q6Urf4ih2VCxssdXwVcVeUSrdicPmw3h6"
          }
          

          Пример ответа:

            "success": true,
            "message": [
              [
                {
                  "orderId": "8q1xW92Z7yd8u5j6kCfMydc8CCxNpmCVHUd97knh69Xw",
                  "success": true,
                  "status": "OrderCanceled"
                },
                {
                  "orderId": "Hq6HpmkeY8bYh5grYHUBncUD8haBGDpns1CtirQr5qPs",
                  "success": true,
                  "status": "OrderCanceled"
                },
                {
                  "orderId": "FWuTQ7qsGXTiA2QzAJERakaisNBSN7Dvya1DTqPgr78K",
                  "success": true,
                  "status": "OrderCanceled"
                },
                {
                  "orderId": "4MsKTThrLJgSGdrz7hCYQZDJbcbrYKrgBjyCkAEyLgBJ",
                  "success": true,
                  "status": "OrderCanceled"
                }
              ]
            ],
            "status": "BatchCancelCompleted"
          }
          

          В ответе каждый элемент массива message представляет результат отмены одного ордера.

          # Cancel All the Orders

          POST /matcher/orderbook/cancel
          
          {
            "sender": "string",
            "timestamp": long,
            "signature": "string"
          }
          

          Параметра запроса:

          Имя поля Описание
          amountAsset ID первого ассета в паре, или WAVES
          priceAsset ID второго ассета в паре, или WAVES
          sender Публиичный ключ отправителя ордера в Base58, относящийся к адресу отправки/получения ордера
          timestamp Unix time в миллисекундах. Используется как одноразовый номер
          signature Curve25519 (opens new window) подпись отправителя [байты публичного ключа отправителя объединённые с timestamp байтами в big-endian (opens new window) represenatation] Пример (opens new window) в WavesJ библиотеке.

          Запрос и ответ такой же как в Cancel All the Orders for the Specified Asset Pair (Разные только URL).

          # Get Order Status

          Позволяет получить статус ордера. Статус возвращается для ордеров, поданных не ранее 30 дней назад. Для более ранних ордеров матчер может вернуть NOT_FOUND.

          GET /matcher/orderbook/{amountAsset}/{priceAsset}/{orderId}
          

          Параметры запроса:

          Имя поля Описание
          amountAsset ID первого ассета в паре, или WAVES
          priceAsset ID второго ассета в паре, или WAVES
          orderId ID ордера

          Пример ответа в JSON:

          {
            "status": "PartiallyFilled",
            "filledAmount": 30000000000,
            "filledFee": 90000
          }
          

          Возможные статусы:

          Статус ордера Описание
          Accepted Ордер принят, но еще не выполнен
          NotFound Ордер с указанным ID и парой активов не найден за последние 30 дней
          PartiallyFilled Ордер выполнен частично. Выполненная сумма в поле filledAmount, уже выплаченная комиссия матчера в поле filledFee
          Filled Ордер полность выполнен
          Cancelled Ордер был отменён. Выполненная сумма в поле filledAmount уже выплаченная комиссия матчера в поле filledFee

          # Get Order History by Public Key

          Позволяет получить историю ордеров для заданного публичного ключа.

          GET /matcher/orderbook/{publicKey}[?activeOnly=true]
          Timestamp: {timestamp}
          Signature: {signature}
          

          Параметры запроса:

          Имя поля Описание
          publicKey Публиичный ключ отправителя ордера в Base58
          Timestamp Unix time в миллисекундах. Используется как одноразовый номер
          signature Curve25519 (opens new window) подпись отправителя [байты публичного ключа отправителя объединённые с timestamp байтами в big-endian (opens new window) represenatation]. Пример (opens new window) в WavesJ библиотеке.

          Возможные параметры запроса:

          activeOnly (false по умолчанию) - true или false. Если true, то вернется список активных ордеров.

          Пример ответа:

          [
            {
              "id": "7VEr4T9icqopHWLawGAZ7AQiJbjAcnzXn65ekYvbpwnN",
              "type": "buy",
              "orderType": "limit",
              "amount": 7757865201004347,
              "fee": 6345852410462127,
              "price": 489,
              "timestamp": 1578074613225,
              "filled": 0,
              "filledFee": 0,
              "feeAsset": null,
              "status": "Accepted",
              "assetPair": {
                "amountAsset": "6rRegyHpdvZBENW4mowKYtKMDs2xpxmMbyNMRMZaZQ7",
                "priceAsset": "8pFqaP5CtPB4kP87gpu2T7vB4LxdfoH9e5mSPQduhCc"
              }
              "avgWeighedPrice": 489
            }
          ]
          

          Параметры ответа:

          Имя поля Описание
          id ID ордера
          type Тип ордера: "buy" или "sell"
          orderType Limit или market ордер
          amount Сумма amountAsset умноженная на 10^amountAssetDecimals. Подробнее - Asset
          fee Комиссия за транзакцию
          price Цена за amountAsset деноминированная в priceAsset и умноженная на 10^(8+ priceAssetDecimals – amountAssetDecimals)
          timestamp Unix time (opens new window) ордера в миллисекундах. Используется как одноразовый номер
          filled Ордер полность выполнен
          filledFee Оплаченная комиссия матчера
          feeAsset Ассет комиссии. Если значение не задано (или null), то используется Waves
          status Статус ордера
          assetPair Пара ассетов. Подробее в секции Asset Pair
          amountAsset ID первого ассета в паре, или WAVES
          priceAsset ID второго ассета в паре, или WAVES
          avgWeighedPrice Средневзвешенная цена исполнения. Рассчитывается следующим образом: (cop1*ea1+cop2*ea2+...+copN*eaN)/filled amount, где cop1 = цена контр ордера 1, cop2 = цена контр ордера 2, ea1 = выполненная сумма 1

          # Get Order History by Asset Pair and Public Key

          Позволяет получить историю ордеров для заданной пары ассетов и открытого ключа.

          GET /matcher/orderbook/[amountAsset]/[priceAsset]/publicKey/[publicKey]
          

          Запрос должен содержать следующие заголовки:

          Timestamp - текущее время. Signature - подпись в base58: sender_public_key_bytes + timestamp_bytes.

          Возможные параметры запроса:

          activeOnly (false по умолчанию) - true или false. Если true, то вернется список активных ордеров.

          Пример ответа:

          [
            {
              "id": "7VEr4T9icqopHWLawGAZ7AQiJbjAcnzXn65ekYvbpwnN",
              "type": "buy",
              "orderType": "limit",
              "amount": 7757865201004347,
              "fee": 6345852410462127,
              "price": 489,
              "timestamp": 1578074613225,
              "filled": 0,
              "filledFee": 0,
              "feeAsset": null,
              "status": "Accepted",
              "assetPair": {
                "amountAsset": "6rRegyHpdvZBENW4mowKYtKMDs2xpxmMbyNMRMZaZQ7",
                "priceAsset": "8pFqaP5CtPB4kP87gpu2T7vB4LxdfoH9e5mSPQduhCc"
              }
              "avgWeighedPrice": 489
            }
          ]
          

          Параметры ответа в секции Get Order History by Public Key.

          # Get All Order History by Address

          Позволяет получить историю ордеров для заданного адреса.

          Примечание: Это системный метод, для которого нужен API ключ.

          GET /matcher/orders/[address]
          

          Возможные параметры запроса:

          activeOnly (false по умолчанию) - true или false. Если true, то вернется список активных ордеров.

          Пример ответа:

          [
            {
              "id": "7VEr4T9icqopHWLawGAZ7AQiJbjAcnzXn65ekYvbpwnN",
              "type": "buy",
              "orderType": "limit",
              "amount": 7757865201004347,
              "fee": 6345852410462127,
              "price": 489,
              "timestamp": 1578074613225,
              "filled": 0,
              "filledFee": 0,
              "feeAsset": null,
              "status": "Accepted",
              "assetPair": {
                "amountAsset": "6rRegyHpdvZBENW4mowKYtKMDs2xpxmMbyNMRMZaZQ7",
                "priceAsset": "8pFqaP5CtPB4kP87gpu2T7vB4LxdfoH9e5mSPQduhCc"
              }
              "avgWeighedPrice": 489
            }
          ]
          

          Параметры ответа в секции Get Order History by Public Key.

          # Get Order by ID and Address

          Позволяет получить информацию об ордере по адресу и ID.

          GET /orders/[address]/[orderId]
          

          Запрос должен содержать заголовок X-API-Key.

          Пример ответа:

          {
            "id": "7VEr4T9icqopHWLawGAZ7AQiJbjAcnzXn65ekYvbpwnN",
            "type": "buy",
            "orderType": "limit",
            "amount": 7757865201004347,
            "fee": 6345852410462127,
            "price": 489,
            "timestamp": 1578074613225,
            "filled": 0,
            "filledFee": 0,
            "feeAsset": null,
            "status": "Accepted",
            "assetPair": {
              "amountAsset": "6rRegyHpdvZBENW4mowKYtKMDs2xpxmMbyNMRMZaZQ7",
              "priceAsset": "8pFqaP5CtPB4kP87gpu2T7vB4LxdfoH9e5mSPQduhCc"
            },
            "avgWeighedPrice": 489
          }
          

          Параметры ответа соответствуют описанию в методе Get Order History by Public Key, но в выводе будет либо один элемент, либо ошибка OrderNotFound.

          # Get Order by ID and Public Key

          Позволяет получить информацию об ордере по публичному ключу и ID.

          GET /orderbook/[publicKey]/[orderId]
          

          Запрос должен содержать подпись в base58: sender_public_key_bytes + timestamp_bytes

          Пример ответа:

          {
            "id": "7VEr4T9icqopHWLawGAZ7AQiJbjAcnzXn65ekYvbpwnN",
            "type": "buy",
            "orderType": "limit",
            "amount": 7757865201004347,
            "fee": 6345852410462127,
            "price": 489,
            "timestamp": 1578074613225,
            "filled": 0,
            "filledFee": 0,
            "feeAsset": null,
            "status": "Accepted",
            "assetPair": {
              "amountAsset": "6rRegyHpdvZBENW4mowKYtKMDs2xpxmMbyNMRMZaZQ7",
              "priceAsset": "8pFqaP5CtPB4kP87gpu2T7vB4LxdfoH9e5mSPQduhCc"
            },
            "avgWeighedPrice": 489
          }
          

          Параметры ответа соответствуют описанию в методе Get Order History by Public Key, но в выводе будет либо один элемент, либо ошибка OrderNotFound.

          # Get Tradable Balance

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

          GET /matcher/orderbook/{amountAsset}/{priceAsset}/tradableBalance/{address}
          

          Пример JSON ответа:

          {
            "4LHHvYGNKJUg5hj65aGD5vgScvCBmLpdRFtjokvCjSL8": 1997736917,
            "WAVES": 677728840
          }
          

          Сумма актива в JSON-представлении умножается на 10^assetDecimals. Так, что в паре 4LHHvYGNKJUg5hj65aGD5vgScvCBmLpdRFtjokvCjSL8/WAVES отправитель может потратить 19.19.97736917 WEST и 6.77728840 WAVES. Подробнее - Asset.

          # Get Order Book

          Позволяет получить книгу ордеров для указанной пары активов.

          GET /matcher/orderbook/{amountAsset}/{PriceAssed}[?depth={depth}]
          

          Параметры запроса:

          Имя поля Описание
          amountAsset ID первого ассета в паре, или WAVES
          priceAsset ID второго ассета в паре, или WAVES
          depth [Опционально] Ограничить количество возвращаемых уровней bid/ask

          Заметки про depth:

          • По умолчанию и максимальное значение depth 100.
          • Можно задать значение 10 или 100. Если задать другое значение, то оно будет округлено до ближайшего 10 или 100. Например, если задать 3, вы получите 10 записей в bids и asks.
          • Эти значения могут поменяться в будущем.

          Ответ содержит JSON представление order book.

          # Get Order Book Info

          Позволяет получить ограничения ордеров для указанной пары активов.

          GET /matcher/orderbook/{amountAsset}/{priceAsset}/info
          

          Параметры запроса:

          Имя поля Описание
          amountAsset ID первого ассета в паре, или WAVES
          priceAsset ID второго ассета в паре, или WAVES

          Пример ответа:

          {
            restrictions = {
              "WAVES-8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS": {
                "min-amount": 0.001,
                "max-amount": 1000000,
                "step-amount": 0.00000001,
                "min-price": 0.001,
                "max-price": 100000,
                "step-price": 0.00000001
              }
            },
            "matchingRules": {
              "tickSize": "0.00000001"
            }
          }
          

          Параметры ответа:

          Имя поля Описание
          restrictions Ограниения на ордеры. null означает что ограничений нет
          min-amount Минимальная сумма ордера для пары ассетов
          max-amount Максимальная сумма ордера для пары ассетов
          step-amount Суммы во всех ордерах для пары активов должны быть кратны этому шагу
          min-price Минимальная цена ордера для пары активов
          max-price Максимальная цена ордера для пары активов
          step-price Цены во всех заявках на пару активов должны быть кратны этому шагу
          tickSize Минимальное ценовое движение пары активов. Подробнее - Tick Size

          # Get Market Status

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

          GET /matcher/orderbook/{amountAsset}/{priceAsset}/status
          

          Параметры запроса:

          Имя поля Описание
          amountAsset ID первого ассета в паре, или WAVES
          priceAsset ID второго ассета в паре, или WAVES

          Пример ответа:

          {
            "lastPrice": 921,
            "lastAmount": 100000000,
            "lastSide": "sell",
            "bid": 670,
            "bidAmount": 33379253731,
            "ask": 962,
            "askAmount": 1099442390
          }
          

          Параметры ответа:

          Имя поля Описание
          lastPrice Цена в последней ExchangeTransaction
          lastAmount Сумма amountAsset в последней ExchangeTransaction
          lastSide Тип последнего ордера, выполненного матчером
          bid Лучшая цена ордеров на покупку в книге ордеров
          bidAmount Итоговая сумма amountAsset умноженная на 10^amountAssetDecimals в buy ордерах на лучшем ценовом уровне
          ask Лучшая цена ордеров на продажу в книге ордеров
          askAmount Итоговая сумма amountAsset умноженная на 10^amountAssetDecimals в sell ордерах на лучшем ценовом уровне

          # Get Rates

          Позволяет получить текущие ставки активов (цена 1 WAVES в указанном активе).

          Отправитель ордера может оплатить комиссию матчера в любом активе, представленном в ответе.

          GET /matcher/settings/rates
          

          Пример JSON ответа:

          {
            "474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu": 0.0020016,
            "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS": 0.00004062,
            "WAVES": 1
          }
          

          В этом примере ставка ETH/WAVES равна 0.0020016, так что Fee_ETH = Fee_WAVES × 0.0020016.

          # Get Matcher Settings

          GET /matcher/settings
          

          Пример ответа в JSON с динмаческой комиссией ордера:

          {
            "orderVersions": [1, 2, 3],
            "orderFee": {
              "dynamic": {
                "baseFee": 600000,
                "rates": {
                  "WAVES": 1,
                  "2gCPcEnoZa9LtZzZPFK9fJf7aWzvdBJUABayd1Zj5qFh": 5
                }
              }
            },
            "priceAssets": [
              "96nWEKQGYq8fTZDMhuULUkBZUyUfNz1kFj9sfkjqnvbZ"
            ]
            "networkByte": 87,
            "matcherPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5"
          }
          

          Параметры ответа:

          Имя поля Описание
          orderFee Режим комиссии ордера. Может быть "dynamic", "fixed" или "percent"
          priceAssets Список прайс ассетов. Подробнее в секции Asset Pair
          baseFee Комиссия матчера в WAVELETs за полностью выполненный ордер. Подробнее в статье Комиссия матчера
          rates Текущие ставки ассетов. Подробнее в секции Get Rates
          orderVersions Версии ордера, поддерживаемые матчером
          matcherPublicKey Публичный ключ матчера в Base58
          networkByte Chain ID (opens new window) (ID блокчейна, который используется для формирования адреса)

          Пример ответа в JSON с фиксированной комиссией ордера:

          {
            "orderVersions": [1, 2, 3],
            "orderFee": {
              "fixed": {
                "assetId": "96nWEKQGYq8fTZDMhuULUkBZUyUfNz1kFj9sfkjqnvbZ",
                "minFee": 10000000
              }
            },
            "priceAssets": [
              "96nWEKQGYq8fTZDMhuULUkBZUyUfNz1kFj9sfkjqnvbZ"
            ]
          }
          

          Где:

          assetId - ID ассета комисии. minFee - Минимальная комиссия в минимальных единицах заданного ассета.

          Пример ответа в JSON с процентной комиссией ордера:

          {
            "orderVersions": [1, 2, 3],
            "orderFee": {
              "percent": {
                "type": "amount",
                "minFee": 0.123
              }
            },
            "priceAssets": [
              "96nWEKQGYq8fTZDMhuULUkBZUyUfNz1kFj9sfkjqnvbZ"
            ]
          }
          

          В этом примере:

          • minFee - Минимальная комиссия ордера в процентах. Где 0.123 это 0.123%.
          • type - Тип ассета комисии. Может быть "amount" - amountAsset, "price" - priceAsset, "spending" - ассет, который расходуется (например, для BUY-ордера WAVES/BTC это BTC) или "receiving" - ассет, который будет получен.

          Пример ответа в JSON:

          {
            "priceAssets": [
              "Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck",
              "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ",
              "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p",
              "Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU",
              "DEJbZipbKQjwEiRjx2AqQFucrj5CZ3rAc4ZvFM8nAsoA",
              "2mX5DzVKWrAJw8iwdJnV2qtoeVG9h5nTDpTqC1wb1WEN",
              "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS",
              "WAVES",
              "474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu",
              "zMFqXuoyrn5w17PFurTqxB7GsS71fp9dfk6XFwxbPCy",
              "62LyMjcr2DtiyF5yVXFhoQ2q414VPPJXjsNYp72SuDCH",
              "HZk1mbfuJpmxU1Fs4AX5MWLVYtctsNcg6e2C6VKqK8zk",
              "B3uGHFRpSUuGEDWjqB9LWWxafQj8VTvpMucEyoxzws5H",
              "5WvPKSJXzVE2orvbkJ8wsQmmQKqTv9sGBPksV4adViw3",
              "BrjUWjndUanm5VsJkbUip8VRYy6LWJePtxya3FNv4TQa",
              "BFWboD9xC64tSmirFbCNARR1NSu6Ep9rP4SRoLkQhBUF",
              "7eMpAC1CVLeZq7Mi16AkvkY2BmLytyApLaUG4TxNFew5",
              "8ouNBeYFxJMaeyPBwF8jY86R457CyEjAY98HaNLFox7N"
            ],
            "orderFee": {
              "dynamic": {
                "baseFee": 300000,
                "rates": {
                  "474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu": 0.0020016,
                  "8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS": 0.00004062,
                  "WAVES": 1
                }
              }
            },
            "orderVersions": [
              1,
              2,
              3
            ]
          }
          

          Параметры ответа:

          Имя поля Описание
          priceAssets Список ценовых ассетов. Подробнее в секции Asset Pair
          baseFee Комиссия матчера в WAVELETs за полностью выполненные ордеры. Подробнее - Matcher Fee
          rates Текущие ставки ассетов. Подробнее в секции Get Rates
          orderVersions Версии ордеров, поддерживаемые матчером

          # Get Matcher Public Key

          GET /matcher
          

          Пример ответа:

          GZXGbB4Tn4iSBGRuoufWMwNa6KkNxeYtXk7tT97xghU8
          

          # Get Current Offset

          Позволяет получить текущий оффсет в очереди.

          Примечание: Это системный метод, для которого нужен API ключ.

          Возвращает количество обработанных команд. Возможные команды:

          Placing order Cancelling order Deleting order book

          GET /matcher/debug/currentOffset
          

          Пример запроса:

          curl --header 'X-API-Key: foobar' 'https://matcher.waves.exchange/matcher/debug/currentOffset'
          

          где "X-API-Key" - это API ключ матчера.

          Пример ответа:

          20323255542
          

          # Get Last Offset

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

          Примечание: Это системный метод, для которого нужен API ключ.

          GET /matcher/debug/lastOffset
          

          Пример ответа:

          30150375999
          

          # Get Oldest Snapshot Offset

          Позволяет получить оффсет последнего снэпшота.

          Примечание: Это системный метод, для которого нужен API ключ.

          Зарегистрированные команды находятся в одной очереди. Каждый матчер считывает и обрабатывает их, а затем изменяет их внутреннее состояние.

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

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

          GET /matcher/debug/oldestSnapshotOffset
          

          Пример ответа:

          1000000
          

          # Get All Snapshot Offsets

          Позволяет получить оффсеты всех книг ордеров.

          Примечание: Это системный метод, для которого нужен API ключ.

          GET /matcher/debug/allSnapshotOffsets
          

          Пример ответа:

          {
            "WAVES-6T9WPGs6b3jwZBPY6MEFmSqLDqdyBkHnZxhvweS4ffbo": 100,
            "5MztYaKDhTPLZxJkckUaHPKQkc917sCKCALKChAfungp-WAVES": 120
          }
          

          # Save Snapshots

          Создает снепшоты всех книг ордеров.

          Примечание: Это системный метод, для которого нужен API ключ.

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

          Вы можете отслеживать прогресс через getAllSnapshotOffsets.

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

          POST /matcher/debug/saveSnapshots
          

          Пример ответа:

          {
            "message": "Saving started"
          }
          

          # Reserved Balance

          Возвращает зарезервированные средства на аккаунте заданного открытого ключа.

          GET /matcher/balance/reserved/[publicKey]
          

          Пример ответа:

          { "WAVES": 350 }

          # Delete Order Book

          Удаляет книгу ордеров.

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

          Примечание: Это системный метод, для которого нужен API ключ.

          DELETE /matcher/orderbook/[amountAsset]/[priceAsset]
          

          Возвращает пустую книгу ордеров.

          Пример ответа:

          {
            "timestamp": 1576143739568,
            "pair": {
              "amountAsset": "4vSJeAji4F7swJazJdZWau9drG1RjFL8QKSx13F7RjKQ",
              "priceAsset": "WAVES"
            },
            "bids": [],
            "asks": []
          }
          

          # Get Transactions By Order

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

          GET /matcher/transactions/[orderId]
          

          Возвращает список транзакций, в которых присутствует данный ордер. Формат транзакций.

          Пример ответа (для mainnet ордера F8HRQv7LzHUeaE3UetpKxiN7ue1tDmvMAD8VKJyaXeMb):

          [
            {
              "senderPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
              "amount": 143748861,
              "fee": 300000,
              "type": 7,
              "version": 2,
              "sellMatcherFee": 37142,
              "sender": "3PEjHv3JGjcWNpYEEkif2w8NXV4kbhnoGgu",
              "feeAssetId": null,
              "proofs": [
                "4WpVKo7s8FgV8y4NG5qStsbZHhwU5c5JBW2RNN1GhwNkPwDfQVhyShSCJw5DyJfzFjrzUi6hwqrm8vcWTadJM4mt"
              ],
              "price": 6051001,
              "id": "CYnpQjUmg6Zog1qoQCEymhUbEJx5xWSnn5UHMsM1nXLL",
              "order2": {
                "version": 1,
                "id": "F8HRQv7LzHUeaE3UetpKxiN7ue1tDmvMAD8VKJyaXeMb",
                "sender": "3P3jStCJsrqgxCeNu5rhXmgQ6qgvdzNmHn5",
                "senderPublicKey": "9wUzxjWd1miFxohhLtMyLMMAny1Ha5M3GLvSFFwB4m7u",
                "matcherPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
                "assetPair": {
                  "amountAsset": "4LHHvYGNKJUg5hj65aGD5vgScvCBmLpdRFtjokvCjSL8",
                  "priceAsset": null
                },
                "orderType": "sell",
                "amount": 1161045582,
                "price": 6050625,
                "timestamp": 1580120181196,
                "expiration": 1582625781196,
                "matcherFee": 300000,
                "signature": "2nVvFtmsvMj32LuQqgVGDYt5tjFYNv1vdEVRceztakKaH4fLo9D4VQMYJU8Kscg46xHLmRhA9HRAkxVxMkiE8QvA",
                "proofs": [
                  "2nVvFtmsvMj32LuQqgVGDYt5tjFYNv1vdEVRceztakKaH4fLo9D4VQMYJU8Kscg46xHLmRhA9HRAkxVxMkiE8QvA"
                ]
              },
              "order1": {
                "version": 2,
                "id": "Bj2TGtbzQ8r11vYMT79vSHbYdAyxKSEcjc5tEUgmyNkE",
                "sender": "3PFBsj8qw2trA3a9XLaUurpqVQMnZdPvHNG",
                "senderPublicKey": "tQfmt5yyFPaWJQ5wrFNfpecAjXqz3qaB8dTEM4aaWj2",
                "matcherPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
                "assetPair": {
                  "amountAsset": "4LHHvYGNKJUg5hj65aGD5vgScvCBmLpdRFtjokvCjSL8",
                  "priceAsset": null
                },
                "orderType": "buy",
                "amount": 13313799552,
                "price": 6051001,
                "timestamp": 1580119693927,
                "expiration": 1582625293926,
                "matcherFee": 300000,
                "signature": "29kbTDR4b5g4LByEbPibhyYpWWqPDGeSBVHGj5gELAB4KbCbKp8CLajyZVTCJV96fsQ8Sxpjbh3UT7WG9uaMgWTV",
                "proofs": [
                  "29kbTDR4b5g4LByEbPibhyYpWWqPDGeSBVHGj5gELAB4KbCbKp8CLajyZVTCJV96fsQ8Sxpjbh3UT7WG9uaMgWTV"
                ]
              },
              "buyMatcherFee": 3239,
              "timestamp": 1580120181256
            },
            {
              "senderPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
              "amount": 1017296712,
              "fee": 300000,
              "type": 7,
              "version": 2,
              "sellMatcherFee": 262857,
              "sender": "3PEjHv3JGjcWNpYEEkif2w8NXV4kbhnoGgu",
              "feeAssetId": null,
              "proofs": [
                "5wvaB6z7PojKU7LvubkaMzjcoDtxuhTTP2mzgPdpr8dHgwS2LJb4a2KX15tRQXzY5dcbCCEc9q6wiRibTtmW4epX"
              ],
              "price": 6051000,
              "id": "GXSSX7j8pZWMoWgFZn8gqL4te4aFPfParhxFHeDPp9Nq",
              "order2": {
                "version": 1,
                "id": "F8HRQv7LzHUeaE3UetpKxiN7ue1tDmvMAD8VKJyaXeMb",
                "sender": "3P3jStCJsrqgxCeNu5rhXmgQ6qgvdzNmHn5",
                "senderPublicKey": "9wUzxjWd1miFxohhLtMyLMMAny1Ha5M3GLvSFFwB4m7u",
                "matcherPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
                "assetPair": {
                  "amountAsset": "4LHHvYGNKJUg5hj65aGD5vgScvCBmLpdRFtjokvCjSL8",
                  "priceAsset": null
                },
                "orderType": "sell",
                "amount": 1161045582,
                "price": 6050625,
                "timestamp": 1580120181196,
                "expiration": 1582625781196,
                "matcherFee": 300000,
                "signature": "2nVvFtmsvMj32LuQqgVGDYt5tjFYNv1vdEVRceztakKaH4fLo9D4VQMYJU8Kscg46xHLmRhA9HRAkxVxMkiE8QvA",
                "proofs": [
                  "2nVvFtmsvMj32LuQqgVGDYt5tjFYNv1vdEVRceztakKaH4fLo9D4VQMYJU8Kscg46xHLmRhA9HRAkxVxMkiE8QvA"
                ]
              },
              "order1": {
                "version": 2,
                "id": "AUnmye7T3gCgGV6x9Kyoet93MTjY8mRCUumBqEHhLq8x",
                "sender": "3PAtZYEC9aPKWuSk6n9UAUQfMEHebiBFmjH",
                "senderPublicKey": "33Sn6veKXe2b2PcRtm8iSEmrQyFprD9LWVEQfeCa1f4D",
                "matcherPublicKey": "9cpfKN9suPNvfeUNphzxXMjcnn974eme8ZhWUjaktzU5",
                "assetPair": {
                  "amountAsset": "4LHHvYGNKJUg5hj65aGD5vgScvCBmLpdRFtjokvCjSL8",
                  "priceAsset": null
                },
                "orderType": "buy",
                "amount": 1000000000000,
                "price": 6051000,
                "timestamp": 1580116419182,
                "expiration": 1582622019181,
                "matcherFee": 300000,
                "signature": "mgqQR1ZY4d4BAc2iEXxpfzzLjCemNgQadWuA1p17sE6ZGe8tmdxk88yqFRi15656QD5LKmLM5czmqg1UBgg2s7t",
                "proofs": [
                  "mgqQR1ZY4d4BAc2iEXxpfzzLjCemNgQadWuA1p17sE6ZGe8tmdxk88yqFRi15656QD5LKmLM5czmqg1UBgg2s7t"
                ]
              },
              "buyMatcherFee": 305,
              "timestamp": 1580120181256
            }
          ]
          

          # Force Cancel Order

          Отменяет ордер также, как Cancel a Single Order, но не требует публичный ключ и подпись.

          Примечание: Это системный метод, для которого нужен API ключ.

          POST /matcher/orders/cancel/[orderId]
          

          # Upsert Rate

          Устанавливает рейт (ставку) по ассету.

          Примечание: Это системный метод, для которого нужен API ключ.

          Функциональность ставок позволяет оплачивать комиссию за ордер в Waves или других ассетах, таких как BTC, если биржа это позволяет.

          Как рассчитать ставку:

          1. Вы рассчитываете комисию ордера в Waves (С учетом скриптов. Базовая комиссия 0,003 Waves + 0,004 за каждый запуск скрипта). Вы можете проверить, есть ли у ассета скрипт, запросив информацию у ноды по ID ассета. Скрипты не могут быть удалены из ассета или добавлены в ассет, который его не имеет.

          2. Умножьте полученное число на ставку желаемого ассета (например, BTC), чтобы получить комиссию ордера.

          3. В ордере укажите рассчитанную комиссию и ID ассета (например, matcherFeeAssetId = BTC).

          Метод upsertRate позволяет:

          • Добавить новую ставку для ассета, если он не указан
          • Обновить имеющуюся ставку

          Это действие обновляет "Список доступных ставок".

          PUT /matcher/settings/rates/[assetId]
          

          Пример ответа в случае добавления:

          {
            "message": "The rate 0.0055 for the asset 42KBAA1CMC7vV7AfHKVapTgNJS1T48YFoi92zU2pLhAF added"
          }
          
          

          Пример ответа в случае обновления:

          {
            "message": "The rate for the asset 42KBAA1CMC7vV7AfHKVapTgNJS1T48YFoi92zU2pLhAF updated, old value = 0.0055, new value = 0.0067"
          }
          

          # Delete Rate

          Удаляет ставку, чтобы удалить комиссию в заданном ассете.

          Примечание: Это системный метод, для которого нужен API ключ.

          Это действие обновляет "Список доступных ставок".

          DELETE /matcher/settings/rates/[assetId]
          

          Пример ответа:

          {
            "message": "The rate for the asset 4SsamnLQ9ETZR9jj5AvyucjUeuLp44uAHmokNm1VoY6L deleted, old value = 0.0067"
          }
          

          # SDK

          Используйте WavesJ (opens new window) клиентскую библиотеку для взимодействием с матчером.

          Настройки матчера
          Правила валидации ордера
          Настройки матчера
          Правила валидации ордера