На этой странице описаны ключевые доменные концепции, с которыми вы столкнётесь при работе с Vilna API. Каждый раздел объясняет, что представляет собой концепция, как она идентифицируется и когда используется. Полное описание эндпоинтов см. в справочнике Platform API.
Vilna идентифицирует каждый блокчейн с помощью глобального идентификатора (GID) стандарта CAIP-2. Формат: namespace:reference — например, eip155:1 для основной сети Ethereum или eip155:137 для Polygon.
Получить список всех поддерживаемых сетей можно с помощью GET /blockchains. Каждая сеть может быть активирована или деактивирована в вашем пространстве имён. Мониторинг ведётся только для активных сетей.
Распространённые GID сетей:
| GID | Сеть |
|---|---|
eip155:1 | Ethereum |
eip155:56 | BNB Smart Chain |
eip155:137 | Polygon |
eip155:42161 | Arbitrum One |
solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp | Solana |
Полную справку по стандарту CAIP см. в разделе Стандарты CAIP.
Адрес представляет блокчейн-аккаунт, который вы хотите отслеживать. Существует два способа добавления адресов:
Внешние адреса — это самостоятельные аккаунты, которые вы импортируете по отдельности с помощью POST /addresses/external. Вы указываете значение адреса, chainFamily (семейство сетей, которое автоматически привязывает адрес ко всем сетям этого семейства) и необязательную метку.
HD-производные адреса генерируются из публичного ключа (см. следующий раздел). Эти адреса создаются последовательно и автоматически ставятся на мониторинг после генерации.
Поддерживаемые форматы адресов:
| Формат | Примеры сетей |
|---|---|
evm | Ethereum, Polygon, Arbitrum, BSC |
p2pkh | Bitcoin (legacy) |
p2sh | Bitcoin (совместимость) |
p2wpkh | Bitcoin (native SegWit) |
p2wsh | Bitcoin (SegWit script) |
solana | Solana |
tron | Tron |
Каждый адрес имеет поле meta — произвольный JSON-объект, в котором можно хранить данные вашего приложения: идентификаторы клиентов, номера счетов или внутренние ссылки. Эти метаданные возвращаются в ответах API и вебхук-уведомлениях, что позволяет легко сопоставлять события блокчейна с вашей бизнес-логикой.
Храните данные приложения (ID клиентов, номера счетов) в поле meta. Оно возвращается в ответах API и вебхук-уведомлениях, что упрощает сопоставление событий блокчейна с бизнес-логикой.
Если у вас есть необработанный публичный ключ и вам нужен соответствующий блокчейн-адрес, используйте POST /addresses/external/resolve. Этот эндпоинт вычисляет адрес из публичного ключа, создает внешний адрес и возвращает его. Публичный ключ используется только для деривации и не сохраняется. Если адрес с вычисленным значением уже существует, возвращается существующий.
curl -X POST "https://${VILNA_NAMESPACE}.vilna.app/addresses/external/resolve" \
-H "X-Api-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"publicKey": "02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5",
"addressFormat": "evm"
}'Поле publicKey принимает hex-кодированные ключи secp256k1 (сжатые или несжатые, с опциональным префиксом 0x) для форматов EVM, Tron и Bitcoin, а также base58-кодированные ключи ed25519 для Solana. Также можно передать необязательные поля label и meta, как и при создании внешнего адреса напрямую.
Это полезно, когда ваша система хранит необработанные публичные ключи (например, из аппаратных кошельков или церемоний генерации ключей) и вам нужно вычислить и зарегистрировать адрес в блокчейне без выполнения вычислений на своей стороне.
Получить список всех адресов можно с помощью GET /addresses.
Если вы управляете HD-кошельком, вы можете импортировать его расширенный публичный ключ (xPub, yPub или zPub) с помощью POST /public_keys. Vilna использует пути деривации BIP-32 / BIP-44 / BIP-49 / BIP-84 для детерминированной генерации дочерних адресов.
После импорта публичного ключа вызовите POST /public_keys/{public_key_id}/addresses/next для генерации следующего неиспользованного адреса в последовательности деривации. Новый адрес автоматически регистрируется для мониторинга в сетях, связанных с публичным ключом.
Этот подход идеален для платежных процессоров и бирж, которым нужен уникальный депозитный адрес для каждого клиента без раскрытия приватного ключа.
Каждый токен или монета идентифицируется с помощью идентификатора актива CAIP-19. Формат: chain_gid/asset_namespace:asset_reference.
Нативные токены используют пространство имён slip44:
eip155:1/slip44:60 - ETH в сети Ethereum
eip155:56/slip44:60 - BNB в сети BSCКонтрактные токены используют пространство имён, соответствующее стандарту токена:
eip155:1/erc20:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 - USDC в сети Ethereum
eip155:56/erc20:0x55d398326f99059fF775485246999027B3197955 - USDT в сети BSCМетаданные токена (название, символ, десятичные знаки) включены в поле references.tokens ответов API.
Транзакция представляет подтверждённую или ожидающую операцию в блокчейне. Получить список транзакций по всем вашим адресам можно с помощью GET /transactions.
Каждая транзакция содержит одно или несколько канонических событий, описывающих произошедшее:
| Тип события | Описание |
|---|---|
transfer | Перевод токена или нативной валюты между адресами |
fee | Оплата газа или сетевой комиссии |
approval | Выдача или изменение разрешения на расходование ERC-20 |
call | Вызов метода смарт-контракта |
contract_create | Развертывание нового смарт-контракта |
События — это строительные блоки для понимания действий транзакции. Например, одна транзакция обмена может породить несколько событий transfer и событие fee.
Лента активности (GET /activity) — это представление более высокого уровня, показывающее изменения балансов на отслеживаемых адресах. Каждая запись включает:
- direction —
in(получено) илиout(отправлено) - amount — какая сумма была получена или потеряна (см. раздел «Суммы» ниже)
- token — какой актив изменился
- address — какой из ваших адресов был затронут
Используйте ленту активности, когда вам нужен простой обзор «что пришло, что ушло» без разбора необработанных событий транзакций.
Запросите текущие активы ваших адресов с помощью GET /balances (все адреса) или GET /addresses/{address}/balances (один адрес). Ответ содержит список каждого токена с его суммой.
Балансы обновляются автоматически по мере индексации новых транзакций.
Все денежные значения в API возвращаются в виде объекта с двумя полями:
{
"base": "1000000",
"formatted": "1.0"
}| Поле | Описание |
|---|---|
base | Необработанное целочисленное значение в наименьшей единице токена (например, wei для ETH, satoshi для BTC) |
formatted | Человекочитаемое десятичное значение с учётом десятичных знаков токена |
Всегда используйте base для арифметики и хранения. Используйте formatted только для отображения.
Всегда используйте base для расчётов и хранения. Значение formatted предназначено только для отображения и может терять точность для очень больших или малых сумм.
Канал уведомлений определяет назначение для доставки событий в реальном времени. Vilna поддерживает два типа каналов:
Вебхук — Vilna отправляет HTTP POST на ваш URL при каждом релевантном событии. Запрос будет включать заголовки с HMAC-SHA256 подписью для верификации (запланировано). Подробнее о подписях см. в разделе Аутентификация.
Telegram — События доставляются в чат Telegram.
Создайте канал с помощью POST /notification_channels и протестируйте его через POST /notification_channels/{notification_channel_id}/actions/test.
Каналы глобальны для вашего пространства имён. Все отслеживаемые адреса доставляют события во все активные каналы.
Ответы на запросы списков и деталей включают объект references, содержащий связанные сущности, чтобы вы могли разрешать идентификаторы без дополнительных API-вызовов.
Для ответа с одним элементом:
{
"item": { "...": "..." },
"references": {
"tokens": { "eip155:1/slip44:60": { "name": "ETH", "...": "..." } },
"blockchains": { "eip155:1": { "name": "Ethereum", "...": "..." } },
"addresses": { "eip155:1:0x742d...": { "...": "..." } }
}
}Для ответа со списком:
{
"items": [ "..." ],
"meta": {
"limit": 30,
"page": 1,
"total": 142,
"total_pages": 5
},
"references": { "...": "..." }
}Объект meta предоставляет информацию о пагинации. Используйте параметры запроса limit и page для навигации по страницам.
API возвращает ошибки в формате RFC 7807 application/problem+json:
{
"type": "https://docs.vilna.io/errors/validation",
"title": "Validation Error",
"status": 422,
"detail": "One or more fields are invalid.",
"fields": [
{ "name": "address.value", "reason": "must be a valid blockchain address" }
]
}Массив fields точно указывает, какие поля не прошли валидацию и почему.
Стандарты CAIP
Полный справочник идентификаторов CAIP-2, CAIP-10 и CAIP-19
Аутентификация
API-ключи, подписи вебхуков и лучшие практики безопасности
Паттерны интеграции
Типовые архитектуры на основе этих концепций
Platform API
Полная документация эндпоинтов
Management API
Эндпоинты управления рабочими пространствами, проектами и ключами