Ми не раз бачили, як команди застрягають на етапі підпису запитів: HMAC-SHA512 з подвійним хешуванням відлякує навіть досвідчених розробників. Алгоритм Kraken один із найсуворіших серед публічних криптобірж. Але на практиці інтеграція на мобільних платформах займає пів дня, якщо знати нюанси. Наша команда з більш ніж 7-річним досвідом та 30+ виконаними інтеграціями біржевих API гарантує стабільну роботу без блокувань.
Проблеми, які ми вирішуємо
HMAC-SHA512 — основа підпису, але помилки виникають через невірне декодування приватного ключа. Private key — це Base64-бінарний секрет, а не ASCII-рядок. На iOS типова помилка: передати Data(privateKey.utf8) замість Data(base64Encoded: privateKey)!. На Android: забути декодувати Base64 перед використанням у Mac.getInstance("HmacSHA512"). Результат — підпис сформовано, але сервер повертає помилку аутентифікації.
Нестандартні імена активів: REST API використовує XBT замість BTC, XDG замість DOGE. Пари виглядають як XBTZUSD. WebSocket v2 нормалізовано (BTC/USD), але REST та історичні дані — ні. Без таблиці мапінгу користувач не впізнає свої активи. Ми реалізуємо аліасну карту з AssetPairs.
Rate limiting без підказок: Kraken не повертає заголовків із залишком ліміту. Перевищення — блокування IP на кілька хвилин. Ми впроваджуємо адаптивний інтервал: баланс раз на 10 секунд, ордери раз на 30, всі маркет-дані через WebSocket.
Як працює підпис запитів Kraken?
- Згенеруйте nonce — Unix timestamp у мілісекундах.
- Обчисліть SHA256 від nonce + postData (urlencoded рядок).
- Створіть HMAC-SHA512 від urlPath + отриманий хеш, використовуючи Base64-декодований приватний ключ.
Результат — API-Sign. Якщо nonce не першим у postData, Kraken поверне EAPI:Invalid nonce. Неправильний підпис може коштувати часу та грошей: один помилковий ордер — до $100 збитку. Наш підхід виключає такі помилки. Ми використовуємо CryptoKit на iOS (доступний з iOS 13) та javax.crypto.Mac на Android. Детальніше в документації Kraken API.
Чому імена активів Kraken відрізняються від стандартних?
Історично Kraken використовував ISO-коди з префіксами: X — базова, Z — котирувана валюта. XBT = Bitcoin, XDG = Dogecoin. Усередині пар префікси подвоюються: XXBTZUSD. WebSocket v2 перейшов на читабельний формат (BTC/USD), але REST залишився старим. Ми будуємо таблицю з AssetPairs і відображаємо зручні назви, а в запитах використовуємо оригінальні.
WebSocket API v2: оновлення
З переходом на v2 змінився формат повідомлень: замість {"event":"subscribe"} — {"method":"subscribe","params":{...}}. Авторизація приватних каналів: отримуємо токен через REST /0/private/GetWebSocketToken, передаємо в params.token при підписці на executions (ордери) або balances. Токен живе 15 хвилин — необхідний механізм оновлення. Без нього сесія тихо помре, і користувач перестане бачити оновлення ордерів.
| Параметр | WebSocket v1 | WebSocket v2 |
|---|---|---|
| URL | wss://ws.kraken.com | wss://ws.kraken.com/v2 |
| Підписка | event: subscribe | method: subscribe, params: {...} |
| Імена активів | XBT/USD | BTC/USD |
| Приватні канали | Токен в параметрах | Токен в params.token |
Приклад коду підпису на Swift:
import CryptoKit func generateSignature(urlPath: String, body: Data, secret: String) -> String { let secretData = Data(base64Encoded: secret)! let nonce = "\(Date().timeIntervalSince1970 * 1000)" var postData = "nonce=\(nonce)" if let additionalData = String(data: body, encoding: .utf8) { postData += "&\(additionalData)" } let sha256 = SHA256.hash(data: postData.data(using: .utf8)!) let hmac = HMAC<SHA512>.authenticationCode(for: urlPath.data(using: .utf8)! + sha256.data, using: SymmetricKey(data: secretData)) return hmac.compactMap { String(format: "%02x", $0) }.joined() } | Дані | REST (поллінг) | WebSocket (push) |
|---|---|---|
| Баланс | /0/private/Balance | balances channel |
| Ордери | /0/private/OpenOrders | executions channel |
| Ринкові дані | /0/public/Ticker | ticker channel |
Що входить в роботу
- Аналіз поточної архітектури додатку та вибір відповідного стеку (iOS: URLSession + Combine, Android: OkHttp + Coroutines).
- Реалізація підпису та обробки помилок (включаючи реконнект WebSocket).
- Налаштування push-сповіщень (APNs/FCM) для підтвердження ордерів.
- Тестування на реальних торгових даних з симуляцією rate limit.
- Документація — опис ендпоінтів, приклади запитів, інструкція з експлуатації.
- Гарантія — 30 днів безкоштовної підтримки після запуску.
Хочете уникнути цих проблем? Замовте інтеграцію Kraken у нас — отримайте безкоштовний аналіз вашого додатку. Оцінимо ваш проект за один робочий день. Зв'яжіться з нами для консультації.
Стек та терміни
Для нативного iOS: CryptoKit (HMAC-SHA512), URLSessionWebSocketTask, Combine Publisher. Для Android: Mac з HmacSHA512, OkHttp WebSocket, Kotlin Coroutines + Flow. Інтеграція spot (без маржі) — 3–4 тижні. Futures API — окремо, з іншою аутентифікацією. Якщо хочете оцінити терміни для вашого проекту, зв'яжіться з нами.
Оцінимо проект за один робочий день. Отримайте консультацію з інтеграції Kraken у ваш додаток — безкоштовно.







