waves_logo Docs
  • Обзор
    Обзор
  • Практические руководства
    • Получение данных из блокчейна
      Получение данных из блокчейна
    • Создание и отправка транзакций
      Создание и отправка транзакций
    • Токенизация
      Токенизация
    • Распространение токена (airdrop)
      Распространение токена (airdrop)
    • Прием платежей
      Прием платежей
    • Обмен токенов
      Обмен токенов
    • Простое голосование
      Простое голосование
    • Список как аргумент
      Список как аргумент
    Практические руководства
  • Смарт-контракты Waves
    Смарт-контракты Waves
  • dApp
    • Создание и запуск dApp
      Создание и запуск dApp
    dApp
  • Cмарт-аккаунт
    • Создание смарт-аккаунта
      Создание смарт-аккаунта
    • [en] Creating and deploying a script manually
      [en] Creating and deploying a script manually
    • [en] Video tutorials
      [en] Video tutorials
    Cмарт-аккаунт
  • Cмарт-ассет
    Cмарт-ассет
  • Инструменты разработчика
    • Waves IDE
      Waves IDE
    • Расширение для VS Code
      Расширение для VS Code
    • Surfboard
      Surfboard
    • Ride REPL
      Ride REPL
    Инструменты разработчика
  • Signer ◆
    Signer ◆
  • Waves API
    • Data Service API
      Data Service API
    • Node REST API 🡥
      Node REST API 🡥
    • Node gRPC Server 🡥
      Node gRPC Server 🡥
    • Blockchain Updates 🡥
      Blockchain Updates 🡥
    Waves API
  • Клиентские библиотеки
    • Waves C#
      • Установка SDK
        Установка SDK
      • Запуск кода
        • Отправка транзакций
          Отправка транзакций
        • Использование криптографических утилит
          Использование криптографических утилит
        • Взаимодействие с нодой
          Взаимодействие с нодой
        • Развертывание смарт-контрактов
          Развертывание смарт-контрактов
        Запуск кода
      Waves C#
    • Gowaves
      • Установка SDK
        Установка SDK
      • Запуск кода
        • Отправка транзакций
          Отправка транзакций
        • Использование криптографических утилит
          Использование криптографических утилит
        • Взаимодействие с нодой
          Взаимодействие с нодой
        • Развертывание смарт-контрактов
          Развертывание смарт-контрактов
        Запуск кода
      Gowaves
    • WavesJ
      • Установка SDK
        Установка SDK
      WavesJ
    • Ts-lib-crypto
      • Установка SDK
        Установка SDK
      Ts-lib-crypto
    • Waves-PHP
      • Установка SDK
        Установка SDK
      Waves-PHP
    • Waves-python
      • Установка SDK
        Установка SDK
      Waves-python
    • Waves-rust
      • Установка SDK
        Установка SDK
      Waves-rust
    Клиентские библиотеки
      • English
      • Русский
      On this page
        • Поиск транзакций
        • Получение рыночных данных
        • Денежные значения
        • Ограничения
      waves_logo Docs

          # Waves Data Service API

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

          API дата-сервиса позволяет получить следующие данные:

          • Список транзакций, в том числе транзакций каждого типа.
          • Данные токенов (ассетов) по ID или биржевым тикерам.
          • Рыночные данные о торговле криптовалютами.

          Команда Waves предоставляет инстансы дата-сервиса с общедоступными публичными методами API. Интерактивная документация в Swagger UI доступна по ссылкам:

          • Mainnet: https://api.wavesplatform.com/v0/docs/
          • Testnet: https://api-testnet.wavesplatform.com/v0/docs/

          💡 Все запросы к API дата-сервиса можно выполнять как методом GET, так и методом POST. Параметры POST-запроса нужно указать в теле запроса в формате JSON; имена ключей такие же, как имена query-параметров в GET-запросе.

          # Поиск транзакций

          • Методы /transactions/{txType} предоставляют список транзакций указанного типа, с применением различных фильтров в зависимости от типа. Например, метод /transactions/transfer возвращает список транзакций перевода с отбором по отправителю, получателю, а также по идентификатору ассета.
          • Метод /transactions/all предоставляет список транзакций независимо от типа, с отбором по адресу отправителя и временной метке.

          Для списков транзакций доступна постраничная выборка. Вместе со списком транзакций методы возвращают поля isLastPage и lastCursor. Если "isLastPage": false, то для получения следующей страницы нужно указать в запросе в параметре after значение из lastCursor.

          # Получение рыночных данных

          API дата-сервиса предоставляет рыночные данные по любой паре ассетов. Источником данных являются транзакции обмена. Источником тикеров является биржа WX Network , разработанная сторонней командой из сообщества.

          • Методы /pairs* предоставляют текущие рыночные данные: цену последней сделки и данные за последние 24 часа: минимальную, максимальную и среднюю цену, объем и количество сделок и др.

            ⚠️ Текущие рыночные данные, в том числе цена, недоступны для пары ассетов, если по ней не было ни одной сделки (транзакции обмена) за последние 24 часа.

          • Метод /candles предоставляет данные для графика свечей OHCLV (open-high-low-close-volume) за указанный период.

          Если в ответе отсутствуют данные

          Если методы возвращают по выбранной паре {amountAsset}/{priceAsset} null или Not found, причины могут быть следующие:

          1. Ассеты указаны в запросе в неправильном порядке. Необходимо определить, какой из ассетов является amount-ассетом (базовой валютой), а какой — price-ассетом (валютой котировки):

            • Вы можете посмотреть пары ассетов в приложении WX Network для Mainnet или Testnet . Первый ассет в паре — это amount-ассет, второй — price-ассет.

            • Вы также можете определить пары с помощью метода GET /matcher/settings API матчера для Mainnet или Testnet :

               • Если оба ассета есть в списке priceAssets, price-ассетом является тот, который следует первым.

               • Если в списке есть только один ассет из пары, он и является price-ассетом.

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

            Подробнее см. раздел Matcher API документации WX Network.

          2. Не было транзакций обмена по выбранной паре в тот период, за который метод предоставляет данные (последние 24 часа для методов /pairs*). Проверить это можно с помощью метода /transactions/exchange , получив, например, 10 последних транзакций обмена по этой паре.

          Рыночные данные доступны по всем матчерам — отправителям транзакций обмена или по выбранному матчеру. Чтобы получить данные по выбранному матчеру, укажите в запросе адрес матчера.

          💡 Адрес матчера WX Network:

          • Mainnet: 3PEjHv3JGjcWNpYEEkif2w8NXV4kbhnoGgu
          • Testnet: 3N8aZG6ZDfnh8YxS6aNcteobN8eXTWHaBBd

          # Денежные значения

          По умолчанию Data Service API возвращает значения денежных полей (цены, суммы, комиссии) в виде чисел с плавающей точкой (например, 1.234567). На блокчейне, а также в REST API ноды такие значения представлены в нормализованном, то есть целочисленном, виде (например, 123456700). Подробнее о нормализации в разделах Атомарная единица токена, Транзакция обмена, Oрдер.

          Чтобы получать значения денежных полей в нормализованном виде, укажите в запросе HTTP-заголовок

          Accept: application/json;money-format=long
          

          Пример:

          Дробные значения в полях fee и amount
          curl -s 'https://api.wavesplatform.com/v0/transactions/transfer?sender=3P2pTpQhGbZrJXATKr75A1uZjeTrb4PHMYf&sort=desc&limit=1' | jq .
          {
            "__type": "list",
            "isLastPage": false,
            "lastCursor": "MzE4MDY3NTAwMDIwOjpkZXNj",
            "data": [
              {
                "__type": "transaction",
                "data": {
                  "height": 3180675,
                  "type": 4,
                  "id": "EjvguwbqvQ9WBMSy8xwU1r3HtLkuSxZMCcRvVxptumjg",
                  "timestamp": "2022-06-27T16:20:33.287Z",
                  "proofs": [
                    "49YXU4icU3L8nfCdWGHLpTfE1fDTDCXw96pd2fmQE5y9jfDUBU4frk7krkJcGpe8p8kYP2FZssT12QN8BqKjbU18"
                  ],
                  "version": 2,
                  "fee": 0.001,
                  "applicationStatus": "succeeded",
                  "sender": "3P2pTpQhGbZrJXATKr75A1uZjeTrb4PHMYf",
                  "senderPublicKey": "8gNkw1MGrCr9QCAm58YiJXw3AN4sLf7yTLCLYrTseYzj",
                  "assetId": "WAVES",
                  "amount": 6.0512,
                  "recipient": "3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo",
                  "feeAsset": "WAVES",
                  "attachment": ""
                }
              }
            ]
          }
          
          Целочисленные значения в полях fee и amount
          curl -s -H 'Accept: application/json;money-format=long' 'https://api.wavesplatform.com/v0/transactions/transfer?sender=3P2pTpQhGbZrJXATKr75A1uZjeTrb4PHMYf&sort=desc&limit=1' | jq .
          {
            "__type": "list",
            "isLastPage": false,
            "lastCursor": "MzE4MTU3NTAwMDA4OjpkZXNj",
            "data": [
              {
                "__type": "transaction",
                "data": {
                  "height": 3181575,
                  "type": 4,
                  "id": "2iVppNFRheucBU6QqQTK211GrMysB1UWmvUBPSzhJ91i",
                  "timestamp": "2022-06-28T07:26:13.814Z",
                  "proofs": [
                    "2dKt6fFapGqTu2hsooVrDpi9FWCFAfKE6CW7CPfwrQhHajTruky2qC9HJ1XMVhywS2CHcNw4rtTo8RgV51Fp3D2Y"
                  ],
                  "version": 2,
                  "fee": 100000,
                  "applicationStatus": "succeeded",
                  "sender": "3P2pTpQhGbZrJXATKr75A1uZjeTrb4PHMYf",
                  "senderPublicKey": "8gNkw1MGrCr9QCAm58YiJXw3AN4sLf7yTLCLYrTseYzj",
                  "assetId": "WAVES",
                  "amount": 604460000,
                  "recipient": "3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo",
                  "feeAsset": "WAVES",
                  "attachment": ""
                }
              }
            ]
          }
          

          # Ограничения

          • Количество одновременных соединений с одного IP-адреса — не более 15. При превышении лимита возвращается HTTP-статус 418.
          • Количество запросов в секунду с одного IP-адреса — не более 40. Если количество поступающих запросов превышает заданное значение, то избыточные запросы ставятся в очередь на обработку. Размер очереди (burst) — 20. Если количество избыточных запросов превысило размер очереди, новые запросы не ставятся в очередь, возвращается HTTP-статус 429.

          ⚠️ Проверяйте производительность запросов к API дата-сервиса, прежде чем запускать свое приложение в продакшен и давать нагрузку. Если используемая вами комбинация фильтров работает медленно (время ответа порядка секунды), обратитесь в чат разработчиков в Telegram : мы подскажем, как получить нужные вам данные другим способом, или оптимизируем обработку такого запроса в дата-сервисе.

          Waves API
          Node REST API 🡥
          Waves API
          Node REST API 🡥