Руководство по интеграции
Base URL:
https://api.crosscurve.fiAlternative Base URL:https://pusher-cdp.x.ubtk.dev(CDP API) Swagger UI: https://api.crosscurve.fi/api-docs/ | https://pusher-cdp.x.ubtk.dev/api-docs TypeScript SDK: @crosscurve/sdk Общая документация: https://docs.crosscurve.fi🚀 Быстрый старт — запустите первый своп за 15 минут 🤝 Партнёрская программа — fee sharing для интеграторов
Содержание
Обзор интеграции
Минимальный флоу
Пример: Своп CRV (Arbitrum) → CRV (Ethereum)
Пример для ознакомления с флоу. Проверяйте актуальность адресов через
/tokenlist.
Важно: Адреса должны быть в формате checksum (EIP-55). Используйте
ethers.utils.getAddress(address)для преобразования.
Примеры для тестирования
Arbitrum (42161)
Ethereum (1)
CRV
CRV
Optimism (10)
Arbitrum (42161)
USDC
USDC
Arbitrum (42161)
Polygon (137)
USDT
USDT
Адреса токенов берите из
/tokenlist.
Если маршрут не найден
Если /routing/scan возвращает пустой массив []:
Проверьте, что токены имеют тег
can_swapПопробуйте изменить сумму (слишком маленькая/большая)
Попробуйте другую пару токенов
Для маршрута нужна ликвидность в поддерживаемых пулах
cURL примеры для быстрого тестирования
Тестирование API без написания кода:
TypeScript SDK
Альтернатива прямым API-вызовам — TypeScript SDK с типизацией и встроенным auto-recovery.
Установка
Быстрый пример
Ключевые методы
init()
Загрузка сетей и токенов
getQuote()
Получение котировки
executeQuote()
Выполнение свопа
trackTransaction()
Отслеживание статуса
recover()
Ручное восстановление
Поддерживаемые провайдеры
ViemAdapter (рекомендуется)
EthersV6Adapter
EthersV5Adapter
Web3Adapter
Архитектура интеграции
Диаграмма процесса
Этапы кроссчейн-свопа
1. Discovery
Получение справочных данных
GET /networks, GET /tokenlist
2. Routing
Поиск доступных маршрутов (включает signature)
POST /routing/scan
3. Transaction
Формирование calldata
POST /tx/create
4. Approval
Разрешение на использование токенов
token.approve() (ERC-20)
5. Execution
Отправка транзакции
signer.sendTransaction()
6. Lookup
Получение requestId
GET /search?search={txHash}
7. Tracking
Отслеживание статуса
GET /transaction/{requestId}
Поддерживаемые сети
Актуальный список через GET /networks. Примеры:
Ethereum
1
ethereum
Arbitrum
42161
arbitrum
Optimism
10
optimism
Polygon
137
polygon
BSC
56
bsc
Поддерживается 20+ EVM-сетей. См.
/networksдля актуального списка.
Справочные данные
GET /networks
Получение списка поддерживаемых блокчейн-сетей.
Параметры запроса:
type
number
Фильтр: 0 - mainnet, 1 - testnet
Пример запроса:
Пример ответа:
Важно: Ключи — имена сетей (
ethereum), не chainId.
GET /tokenlist
Получение списка токенов.
Пример запроса:
Пример ответа:
Важно: Ключи - имена сетей. Для обмена проверяйте наличие тега
can_swapу токена.
Основные теги токенов:
can_swap
Доступен для кроссчейн-обмена
stable
Стейблкоин
native
Нативный токен сети (ETH, BNB...)
wrapped_native
Wrapped версия (WETH, WBNB...)
curve_lp
LP токен Curve
GET /prices/{token}
Получение цены токена в USD.
Параметры пути:
token
string
Адрес токена (checksum)
⚠️ Важно: Используйте адрес токена, не символ. Символы (USDC, CRV) не поддерживаются. Рекомендуется использовать
/prices/{token}/{chainId}для однозначности.
Пример:
GET /prices/{token}/{chainId}
Получение цены токена в конкретной сети.
Пример:
Пример ответа: 0.999827 (число, цена в USD)
POST /prices
Пакетное получение цен нескольких токенов (batch запрос).
Request Body:
Response:
Выполнение кроссчейн-свопа
POST /routing/scan
Поиск доступных маршрутов для обмена.
Headers:
Content-Type
Да
application/json
api-key
Нет
API ключ партнёра (Free или Standard). При наличии ответ включает поля feeShare, feeShareRecipient, feeShareToken. Standard ключи также позволяют задавать feeShareBps
Request Body:
Параметры:
params.chainIdIn
number
Да
ID исходной сети
params.chainIdOut
number
Да
ID целевой сети
params.tokenIn
string
Да
Адрес исходного токена
params.tokenOut
string
Да
Адрес целевого токена
params.amountIn
string
Да
Сумма в минимальных единицах
slippage
number
Да
Допустимое проскальзывание (%)
feeFromAmount
boolean
Нет
Вычитать комиссию из входной суммы
feeToken
string
Нет
Адрес токена для оплаты комиссий
from
string
Нет
Адрес кошелька пользователя (для оценки газа)
feeShareBps
number
Нет
Комиссия интегратора в базисных пунктах (например, 50 = 0.5%). Только для Standard API ключей
providers
string[]
Нет
Фильтр провайдеров роутинга (например: ["AXELAR", "LAYER_ZERO"])
Response:
Дополнительные поля ответа:
sourceFee
Комиссия на исходной сети (token, amount, usd)
deliveryFee
Комиссия за доставку (token, amount, usd)
feeShare
Доля комиссии для партнёра (только с api-key)
feeShareRecipient
Адрес получателя партнёрской комиссии
feeShareToken
Токен партнёрской комиссии
consumptions
Детализация потребления газа по бриджам
signature
Подпись маршрута (для CDP API)
Структура ответа: Массив объектов, где каждый объект — это отдельный маршрут. Выбираете один маршрут и передаёте его целиком в
/tx/create. Полеrouteвнутри объекта — это массив шагов данного маршрута.
Пустой массив
[]— маршрут не найден. См. Если маршрут не найден.
POST /estimate
DEPRECATED: Этот эндпоинт больше не поддерживается. Подпись (
signature) теперь включена непосредственно в ответ/routing/scan. Используйте маршрут из/routing/scanнапрямую в/tx/create.
Получение оценки операции с подписью для выполнения.
Request Body: Весь объект маршрута из /routing/scan (передаётся целиком, не отдельные поля)
Response:
POST /tx/create
Формирование данных транзакции для отправки в блокчейн.
Request Body:
Параметры:
from
string
Да
Адрес отправителя
recipient
string
Да
Адрес получателя
routing
object
Да
Весь объект маршрута из /routing/scan (включает signature)
estimate
object
Нет
DEPRECATED — не требуется, signature уже включена в routing
permit
object
Нет
EIP-2612 permit подпись
buildCalldata
boolean
Нет
Собрать calldata
Примечание: Поле
estimateбольше не требуется — подпись (signature) уже включена в объектroutingиз/routing/scan.
Response (с buildCalldata: true): — рекомендуется
Готово для sendTransaction({ to, data, value }).
Response (без buildCalldata):
Требует вызова через ethers.Contract.
Token Approval
Перед выполнением свопа необходимо разрешить контракту CrossCurve использовать ваши токены.
Откуда брать spenderAddress? Используйте
txData.toиз ответа/tx/create— это адрес контракта, который будет тратить ваши токены.
Стандартный Approve (ERC-20)
Permit (EIP-2612) - Approve через подпись
Если токен поддерживает EIP-2612 (поле permit: true в tokenlist), можно использовать подпись вместо транзакции approve.
Отслеживание транзакций
GET /transaction/{requestId}
Получение статуса кроссчейн-транзакции.
Параметры:
requestId
string
Уникальный ID операции
Response:
Возможные статусы:
in progress
Операция выполняется
completed
Успешно завершена
failed
Ошибка выполнения
reverted
Откат (требуется inconsistency)
retry
Готов для повторной отправки через другой бридж
canceled
Отменена
Алгоритм обработки статуса:
Расширенный ответ с bridgeState:
GET /search
Поиск транзакций по хешу или requestId.
Параметры:
search
string
Да
Хеш транзакции или requestId
limit
number
Нет
Лимит результатов
offset
number
Нет
Смещение
Пример:
GET /history
История транзакций пользователя.
Параметры:
address
string
Да
Адрес кошелька
Пример:
Обработка ошибок
Сценарии
status: "completed"
Операция завершена ✅
destination.status: "retry"
Вызвать /tx/create/retry для повтора через другой бридж
destination.emergency: true
Вызвать /tx/create/emergency для восстановления
inconsistency: true
Вызвать /inconsistency для возврата
GET /inconsistency/{requestId}
Получение параметров для возврата средств при inconsistency.
Пример:
POST /inconsistency
Создание транзакции возврата.
Флоу:
Вызовите
GET /inconsistency/{requestId}— получите параметры (tokenIn, tokenOut, chainIdIn, chainIdOut, amountIn)Подпишите данные о возврате кошельком пользователя (EIP-712 или personal_sign)
Передайте подпись и оригинальный маршрут в этот эндпоинт
Request Body:
Параметры:
requestId
string
Да
ID операции с inconsistency
signature
string
Да
Подпись пользователя (65 байт hex)
routing
object
Да
Оригинальный маршрут из /routing/scan
permit
object
Нет
EIP-2612 permit (если токен поддерживает)
POST /tx/create/emergency
Аварийное восстановление заблокированных средств.
Когда использовать: При
destination.emergency: trueв статусе транзакции — средства заблокированы на destination chain и требуют ручного восстановления.
Request Body:
Параметры:
requestId
string
Да
ID заблокированной операции
signature
string
Да
Подпись пользователя (65 байт hex)
Response: Возвращает данные транзакции для восстановления средств.
POST /tx/create/retry
Повторная отправка через альтернативный бридж.
Когда использовать: При
destination.status: "retry"— доставка через один бридж не удалась, но есть альтернативные бриджи.
Request Body:
Параметры:
requestId
string
Да
ID операции для повтора
signature
string
Да
Подпись пользователя (65 байт hex)
Response:
Пример использования:
Создание подписи для Emergency/Inconsistency/Retry
Для эндпоинтов /tx/create/emergency и /inconsistency требуется подпись, подтверждающая владение кошельком.
Типичные ошибки API
Can't find receiveRequest
requestId не найден
Проверить requestId
Can't find paymentTx
Транзакция не найдена
Проверить requestId
Routing signature not valid
Истёк или изменён маршрут
Повторить /routing/scan
Already completed
Транзакция завершена
Действие не требуется
Not an emergency
Условия emergency не выполнены
Подождать или проверить статус
Uncorrect user address
Подпись не от владельца
Подписать кошельком из from
invalid signature string
Неверный формат подписи
Проверить 65-байтную hex подпись
Retry is not supported for single bridge
Только один бридж доступен
Использовать emergency вместо retry
No remaining bridges available
Все бриджи уже использованы
Использовать emergency
API Reference
Список эндпоинтов
Справочные данные
GET
/networks
Список сетей
GET
/tokenlist
Список токенов
GET
/validators
Статус валидаторов
GET
/ready
Готовность сервиса
GET
/prices/{token}
Цена токена
GET
/prices/{token}/{chainId}
Цена в сети
POST
/prices
Пакетные цены
Маршрутизация и обмен
POST
/routing/scan
Поиск маршрутов (включает signature)
POST
/estimate
DEPRECATED — Оценка операции
POST
/tx/create
Создание транзакции
Мониторинг
GET
/transaction/{requestId}
Статус транзакции
GET
/search
Поиск транзакций
GET
/history
История пользователя
GET
/transactions
Список транзакций
Обработка ошибок
GET
/inconsistency/{requestId}
Параметры возврата
POST
/inconsistency
Транзакция возврата
POST
/tx/create/emergency
Аварийное восстановление
POST
/tx/create/retry
Повторная отправка через другой бридж
Supply и статистика
Значения динамические, примеры актуальны на момент тестирования.
GET
/supply/eywa/ts
Total Supply EYWA
число
GET
/supply/eywa/ms
Max Supply EYWA
число
GET
/supply/eywa/cmc
Данные для CoinMarketCap
число
GET
/supply/eywa/cg
Данные для CoinGecko
{"result":"..."}
GET
/points/multipliers
Множители поинтов
объект
NFT операции
GET
/nft/rarity
Редкость NFT
tokens (query, string) ⚠️
POST
/nft/estimate
Оценка NFT операции
wallet, tokenIds (array of numbers)
POST
/nft/tx
Создание NFT транзакции
wallet, tokenIds, estimate
POST
/nft/emergency
Аварийная операция NFT
requestId, signature
⚠️ Известный баг:
GET /nft/rarityне парсит query параметрtokens. Эндпоинт временно недоступен.
Флоу NFT операций:
Примеры кода
Основной флоу см. в разделе Обзор интеграции.
TypeScript: Типы и polling
JavaScript: Получение сетей и токенов
Python: Поиск маршрута
Коды операций маршрута
A
Добавление ликвидности
S
Своп
R
Удаление ликвидности
LM
Lock/Mint (блокировка и минтинг)
BU
Burn/Unlock (сжигание и разблокировка)
BM
Burn/Mint
Uw
Unwrap (развёртывание нативного токена)
W
Wrap (обёртывание нативного токена)
M
Emergency Mint
U
Emergency Unlock
Rate Limits и Best Practices
API ключи
Доступны два типа API ключей:
Тип ключа
Запросов/мин
Комиссия
feeShareBps
Free
20
0%
Недоступен
Standard
60
Из параметра feeShareBps
1–10000 bps
Ключ передаётся в заголовке api-key:
API доступен без ключа, но ключ необходим для повышенных лимитов и заработка комиссий.
Тестовые ключи для разработки:
Free:
test-sdk-test-sdk-test-sdk-freeStandard:
test-sdk-test-sdk-test-sdk-standard
Для получения production API ключа обращайтесь к BD: @Eywa_BDLead / [email protected]
Rate Limits
/networks, /tokenlist
Кешировать локально
/routing/scan
По запросу пользователя
/tx/create
После выбора маршрута
/transaction/{id}
Polling с интервалом
/prices
Кешировать при необходимости
Best Practices
Кешируйте
/networksи/tokenlist— данные меняются редкоChecksum адресов — рекомендуется EIP-55 формат для совместимости
Проверяйте
can_swapперед вызовом/routing/scanПроверяйте актуальность маршрута — маршруты имеют ограниченный срок действия
Polling — интервал 5-10 сек, обрабатывайте
inconsistencyиemergencyСохраняйте requestId — храните после отправки транзакции для отслеживания и recovery
Slippage — используйте адекватные значения (0.5-1% для стейблов, 1-3% для волатильных)
Используйте правильный кошелёк для подписей recovery — должен совпадать с
fromоригинальной транзакцииУчитывайте decimals токенов — не все токены имеют 18 decimals
Ограничения
Минимальная сумма
Зависит от пары токенов и ликвидности
Максимальная сумма
Ограничена ликвидностью пулов
Slippage
Указывается в процентах при вызове /routing/scan
Время выполнения
Зависит от сетей и загрузки oracle network
Адреса контрактов
Адреса контрактов доступны через /networks:
Portal
Точка входа для кроссчейн операций
portal
Synthesis
Контракт синтетических токенов
synthesis
Router
Маршрутизатор свопов
router
Структура комиссий
Информация о комиссиях возвращается в ответе /routing/scan:
dex
Комиссия DEX/пула
В каждом шаге route
bridge
Комиссия моста
В шагах bridgeIn/bridgeOut
aggregation
Комиссия агрегации
Общая комиссия CrossCurve
total
Итоговая комиссия
totalFee в маршруте
FAQ
Общие вопросы
Q: Нужен ли API ключ? A: API доступен без ключа, но с ограниченным лимитом (20 запросов/мин). Доступны два типа ключей: Free (20 запросов/мин, без комиссии) и Standard (60 запросов/мин, комиссия через feeShareBps). См. API ключи.
Q: Есть ли rate limits? A: Free ключи — 20 запросов/мин, Standard ключи — 60 запросов/мин. Кешируйте справочные данные и избегайте частых запросов.
Q: Какие сети поддерживаются? A: Актуальный список доступен через GET /networks. Поддерживаются EVM-совместимые сети.
Q: Почему /routing/scan возвращает пустой массив? A: Маршрут не найден. См. Если маршрут не найден.
Технические вопросы
Q: Как получить requestId после отправки транзакции? A: RequestId эмитируется в событиях контракта Portal. Используйте GET /search?search={txHash} для поиска.
Q: Что делать при inconsistency: true? A: Требуется возврат средств:
Вызовите
GET /inconsistency/{requestId}— получите параметры для подписиПодпишите данные кошельком пользователя
Вызовите
POST /inconsistencyсrequestId,signatureи оригинальнымrouting
Q: Что делать при emergency: true? A: Требуется восстановление средств. Вызовите POST /tx/create/emergency с requestId и signature (подпись пользователя).
Q: Как работает permit (EIP-2612)? A: Если токен поддерживает permit (permit: true в tokenlist), можно подписать разрешение оффчейн вместо отдельной транзакции approve. Передайте подпись {v, r, s} в /tx/create.
Глоссарий
Portal
Контракт-точка входа для кроссчейн операций
Synthesis
Контракт для минтинга/сжигания синтетических токенов
Router
Контракт маршрутизации свопов
RequestId
Уникальный идентификатор кроссчейн операции
Inconsistency
Состояние, требующее возврата средств
Emergency
Состояние, требующее восстановления средств
Retry
Повторная отправка через альтернативный бридж
can_swap
Тег токена, указывающий на возможность кроссчейн обмена
Synth
Синтетический токен, представляющий актив с другой сети
bridgeIn
Операция блокировки токена на source chain
bridgeOut
Операция разблокировки токена на destination chain
Oracle
Сеть валидаторов CrossCurve
Slippage
Допустимое отклонение цены от ожидаемой
sourceFee
Комиссия на исходной сети
deliveryFee
Комиссия за доставку на целевую сеть
feeShare
Доля комиссии для партнёра (при использовании api-key)
bridgeState
Состояние доставки по каждому бриджу (AXELAR, LAYER_ZERO)
Changelog
История изменений API. Следите за обновлениями в Swagger UI.
2025-01
BREAKING: /estimate endpoint deprecated — signature теперь включена в /routing/scan. Обновлён флоу: routing/scan → tx/create → send TX
2025-01
Добавлено: CDP API URL, api-key для партнёров, новые параметры routing (feeFromAmount, feeToken, providers), sourceFee/deliveryFee/feeShare в ответе, endpoint /tx/create/retry, статус retry, bridgeState
2025-12
Документация создана: Quick Start, API Reference, примеры кода
—
Актуальные изменения API см. в Swagger UI
Поддержка
Swagger UI: https://api.crosscurve.fi/api-docs/
Документация: https://docs.crosscurve.fi
Twitter/X: @crosscurvefi
Партнёрство и API-ключи
Для получения партнёрского API-ключа (fee sharing) обращайтесь к BD:
Email: [email protected]
Telegram: @Eywa_BDLead
Last updated

