ראינו צוותים שנתקעים בשלב חתימת הבקשה: HMAC-SHA512 עם גיבוב כפול מפחיד אפילו מפתחים מנוסים. האלגוריתם של Kraken הוא אחד המחמירים ביותר בין בורסות הקריפטו הציבוריות. אבל בפועל, אינטגרציה בפלטפורמות ניידות לוקחת חצי יום אם אתה מכיר את הניואנסים. עם ניסיון של למעלה מ-10 שנים ו-40+ אינטגרציות API של בורסות שהושלמו, הצוות שלנו מבטיח פעולה יציבה ללא נעילות.
בעיות שאנחנו פותרים
HMAC-SHA512 הוא הליבה של החתימה, אבל שגיאות נובעות מפענוח לא נכון של המפתח הפרטי. המפתח הפרטי הוא סוד בינארי מסוג Base64, לא מחרוזת ASCII. ב-iOS, טעות אופיינית היא העברת {"event":"subscribe"} במקום {"method":"subscribe","params":{...}}. באנדרואיד, שוכחים לפענח Base64 לפני השימוש ב-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 API משתמש ב-XBT במקום BTC, XDG במקום DOGE. זוגות נראים כמו XBTZUSD. WebSocket v2 מנרמל (BTC/USD), אבל REST ונתונים היסטוריים לא. ללא טבלת מיפוי, משתמשים לא יזהו את הנכסים שלהם. אנו מיישמים מפת כינויים מ-AssetPairs.
הגבלת קצב ללא רמזים: Kraken לא מחזיר כותרות עם המגבלה הנותרת. חריגה ממנה גורמת לחסימת IP למספר דקות. אנו מיישמים מרווחים אדפטיביים: איזון כל 10 שניות, הזמנות כל 30 שניות, כל נתוני השוק דרך WebSocket.
איך חתימת בקשות Kraken עובדת
- צור nonce — חותמת זמן Unix במילישניות.
- חשב SHA256 של nonce + postData (מחרוזת מקודדת URL).
- צור HMAC-SHA512 של urlPath + ה-hash המתקבל, באמצעות המפתח הפרטי המפוענח מ-Base64.
התוצאה — API-Sign. אם nonce לא ראשון ב-postData, Kraken מחזיר EAPI:Invalid nonce. חתימה שגויה יכולה לעלות זמן וכסף: הזמנה אחת שגויה יכולה להוביל להפסד של $100. הגישה שלנו מבטלת שגיאות כאלה. אנו משתמשים ב-CryptoKit ב-iOS (זמין מאז iOS 13) וב-javax.crypto.Mac באנדרואיד. פרטים נוספים בתיעוד API של Kraken.
למה שמות הנכסים של Kraken שונים מהסטנדרט
היסטורית, Kraken השתמשה בקודי ISO עם קידומות: X עבור מטבע בסיס, Z עבור מטבע ציטוט. XBT = ביטקוין, XDG = דוג'קוין. בתוך זוגות, הקידומות מוכפלות: XXBTZUSD. WebSocket v2 עבר לפורמט קריא (BTC/USD), אבל REST נשאר ישן. אנו בונים טבלה מ-AssetPairs ומציגים שמות נוחים תוך שימוש במקוריים בבקשות.
WebSocket API v2: עדכונים
עם המעבר ל-v2, פורמט ההודעות השתנה: מ-{"event":"subscribe"} ל-{"method":"subscribe","params":{...}}. הרשאה לערוצים פרטיים: קבל טוקן דרך REST /0/private/GetWebSocketToken, העבר אותו ב-params.token בעת הרשמה לביצועים (הזמנות) או איזונים. הטוקן חי 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 |
| הזמנות | /0/private/OpenOrders | ערוץ executions |
| נתוני שוק | /0/public/Ticker | ערוץ ticker |
מה כלול
- ניתוח הארכיטקטורה הנוכחית של האפליקציה שלך ובחירת הסט המתאים (iOS: URLSession + Combine, אנדרואיד: OkHttp + Coroutines).
- יישום חתימה וטיפול בשגיאות (כולל חיבור מחדש של WebSocket).
- הגדרת התראות push (APNs/FCM) לאישורי הזמנות.
- בדיקות עם נתוני מסחר אמיתיים המדמים הגבלות קצב.
- תיעוד — תיאורי נקודות קצה, דוגמאות בקשות, הוראות הפעלה.
- אחריות — 30 ימי תמיכה חינם לאחר ההשקה.
רוצה להימנע מהבעיות האלה? הזמין אינטגרציית Kraken מאיתנו וקבל ניתוח של האפליקציה שלך. נעריך את הפרויקט שלך ביום עסקים אחד. צור קשר לייעוץ.
סט וציר זמן
ל-iOS native: CryptoKit (HMAC-SHA512), URLSessionWebSocketTask, Combine Publisher. לאנדרואיד: Mac עם HmacSHA512, OkHttp WebSocket, Kotlin Coroutines + Flow. אינטגרציית ספוט (ללא מינוף) — 3-4 שבועות. API לחוזים עתידיים — בנפרד, עם אימות שונה. אם אתה רוצה להעריך את ציר הזמן לפרויקט שלך, צור קשר.
נעריך את הפרויקט שלך ביום עסקים אחד. קבל ייעוץ על אינטגרציית Kraken לאפליקציה שלך — ללא תשלום.







