# 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, причины могут быть следующие:
Ассеты указаны в запросе в неправильном порядке. Необходимо определить, какой из ассетов является amount-ассетом (базовой валютой), а какой — price-ассетом (валютой котировки):
• Вы можете посмотреть пары ассетов в приложении WX Network для Mainnet или Testnet. Первый ассет в паре — это amount-ассет, второй — price-ассет.
• Вы также можете определить пары с помощью метода
GET /matcher/settings
API матчера для Mainnet или Testnet:• Если оба ассета есть в списке
priceAssets
, price-ассетом является тот, который следует первым.• Если в списке есть только один ассет из пары, он и является price-ассетом.
• Если обоих ассетов нет в списке, их ID в байтовом представлении нужно отсортировать лексикографически: первый (наименьший) является price-ассетом.
Подробнее см. раздел Matcher API документации WX Network.
Не было транзакций обмена по выбранной паре в тот период, за который метод предоставляет данные (последние 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: мы подскажем, как получить нужные вам данные другим способом, или оптимизируем обработку такого запроса в дата-сервисе.