עמלות הניתנות להתאמה אישית ומפתחות API מאובטחים לבורסת הקריפטו שלך

סוחרים ושותפים נתקלים לעיתים קרובות בעמלות לא גמישות ובניהול לא מאובטח של מפתחות API, מה שמאט את צמיחת הבורסה. אנו בונים מערכות ניהול עמלות ומפתחות API גמישות במפתח מלא, תוך הבטחת אחסון אמין, ביקורת מפורטת ורמות התאמה אישית לכל משתמש. הצוות שלנו מוביל מהקונספט ועד לתמיכה שוטפת, כך שהבורסה שלכם פועלת ביציבות וגדלה עם העסק שלכם.

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1481
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1335
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1034
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1293
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    738
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1031

בעיה אופיינית בבורסות קריפטו: סוחרים מתלוננים על עמלות גבוהות ולא גמישות, שותפים לא רואים את התשלומים שלהם, ומפתחי API חסרים או מאוחסנים בטקסט פשוט. פתרנו את זה עבור תריסר בורסות — הנה איך.

אנו מפתחים מבני עמלות גמישים עבור בורסות קריפטו. מפתחות API הם המקבילה התכנותית של שם משתמש/סיסמה, המאפשרים לסוחרים ולשותפים לנהל רמות עמלה. מערכת מפתחות API תקינה פירושה הרשאות גמישות, אחסון מאובטח ויומן ביקורת מפורט. במשך יותר מ-5 שנים השלמנו יותר מ-50 פרויקטים עבור בורסות ופלטפורמות DeFi. יישום הגדרת תעריפים גמישה מאפשר לסוחרים עם נפחי מסחר מ-100 BTC לחסוך עד $5000 בחודש על עמלות, ושותפים מקבלים תשלומים של עד 30% מהעמלות ממשתמשים מופנים.

מודל נתונים של עמלות ומפתחות API

type APIKey struct {
    ID string // публичный ключ (например: "ak_prod_a1b2c3d4...")
    Secret string // хэш секрета (NEVER хранить plain text)
    UserID int64
    Label string // "Trading Bot", "Portfolio Tracker"
    // Разрешения
    Permissions APIPermissions
    // Ограничения
    IPWhitelist []string // если пустой — любой IP
    ExpiresAt *time.Time
    // Статус
    IsActive bool
    LastUsedAt *time.Time
    CreatedAt time.Time
}

type APIPermissions struct {
    // Trading
    SpotTrade bool
    MarginTrade bool
    FuturesTrade bool
    // Account
    ReadAccount bool // балансы, история
    Withdraw bool // ВНИМАНИЕ: высокий риск
    // Market Data
    ReadMarketData bool // всегда включено для бесплатного доступа
}

הרשאת משיכה — ההרשאה המסוכנת ביותר. המלצה: דרוש אישור נפרד בעת הפעלתה, רשימת כתובות לבנות נפרדת למפתח זה, והודעת דוא"ל.

הגדרת רמות עמלה למשתמשים שונים

כל מפתח API יכול להיות מקושר לקבוצת עמלה. לדוגמה, עבור סוחרים עם נפח >100 BTC — עמלת יוצר של 0.1%, עבור שותפים — תשלומי הפניה של 20% מהעמלה. קבוצות מוגדרות בפאנל הניהול, והחישובים מתבצעים בזמן אמת.

מיפוי קבוצה למפתח:

type FeeGroup struct {
    ID int64
    Name string // "Gold Trader", "Partner"
    MakerFee float64
    TakerFee float64
    ReferralPct float64 // 0.2 = 20%
}

type APIKey struct {
    // ... предыдущие поля
    FeeGroupID int64
}

בעת עיבוד הזמנה, העמלה נלקחת מהקבוצה המקושרת למפתח. אם אין מפתח מקושר, נעשה שימוש בתעריף ברירת המחדל של הבורסה.

הגדרת רמות עמלה ב-5 שלבים:

  1. צור קבוצות עמלה בפאנל הניהול — הגדר שם, עמלת יוצר/לוקח, אחוז תשלום הפניה.
  2. קשר את הקבוצה למפתח API דרך שדה type APIKey struct { ID string // публичный ключ (например: "ak_prod_a1b2c3d4...") Secret string // хэш секрета (NEVER хранить plain text) UserID int64 Label string // "Trading Bot", "Portfolio Tracker" // Разрешения Permissions APIPermissions // Ограничения IPWhitelist []string // если пустой — любой IP ExpiresAt *time.Time // Статус IsActive bool LastUsedAt *time.Time CreatedAt time.Time } type APIPermissions struct { // Trading SpotTrade bool MarginTrade bool FuturesTrade bool // Account ReadAccount bool // балансы, история Withdraw bool // ВНИМАНИЕ: высокий риск // Market Data ReadMarketData bool // всегда включено для бесплатного доступа } (ראה מודל לעיל).
  3. הגדר הרשאות למפתח: spot_trade, withdraw, read_account וכו'.
  4. הגדר רשימת IP לבנה — הגבל גישה לכתובות מהימנות בלבד.
  5. הפעל יומן ביקורת — כל בקשה ל-API מתועדת לניתוח מאוחר יותר.

יצירת מפתחות ואחסונם

import (
	"crypto/rand"
	"encoding/hex"
	"golang.org/x/crypto/bcrypt"
)

func GenerateAPIKey() (publicKey, secretKey string, err error) {
	// Public key: 32 байта, hex encoded
	pubBytes := make([]byte, 16)
	if _, err = rand.Read(pubBytes); err != nil {
		return
	}
	publicKey = "ak_" + hex.EncodeToString(pubBytes)

	// Secret: 32 байта, hex encoded
	secBytes := make([]byte, 32)
	if _, err = rand.Read(secBytes); err != nil {
		return
	}
	secretKey = hex.EncodeToString(secBytes)
	return
}

func HashSecret(secret string) (string, error) {
	// bcrypt для хранения — медленный hash, устойчив к brute force
	hash, err := bcrypt.GenerateFromPassword([]byte(secret), bcrypt.DefaultCost)
	return string(hash), err
}

func VerifySecret(secret, hash string) bool {
	return bcrypt.CompareHashAndPassword([]byte(hash), []byte(secret)) == nil
}

קריטי: המפתח הסודי מוצג למשתמש פעם אחת בעת היצירה. רק ה-hash של bcrypt מאוחסן במסד הנתונים. אם המשתמש מאבד את הסוד, יש ליצור מפתח חדש.

פרטי אחסון סוד המפתח הסודי מוצג למשתמש פעם אחת בעת היצירה ולעולם אינו מאוחסן בטקסט פשוט. רק ה-hash של bcrypt מאוחסן במסד הנתונים. אם המשתמש מאבד את הסוד, יש ליצור מפתח חדש. עבור אימות [HMAC](https://en.wikipedia.org/wiki/HMAC), אנו משתמשים בהצפנת AES-256 נפרדת עם מפתח מ-HSM, המונעת שחזור של הסוד המקורי.

למה חשוב בידוד עמלות לפי שותף?

כל שותף מקבל מפתח API משלו עם הרשאות מוגבלות — גישת קריאה בלבד לסטטיסטיקה וניהול ההפניות שלו. זה מונע דליפות נתונים ומניפולציות על עמלות. אנו מבטיחים ששותף אחד לא יכול לראות את התעריפים של אחר. יישום מערכת כזו מאפשר לסוחרים עם נפחי מסחר מ-100 BTC לחסוך עד $5000 בחודש על עמלות, ושותפים מקבלים תשלומים של עד 30% מהעמלות ממשתמשים מופנים.

Middleware לאימות

func APIKeyAuthMiddleware(db *DB) func(http.Handler) http.Handler {
	return func(next http.Handler) http.Handler {
		return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
			apiKeyID := r.Header.Get("X-API-Key")
			signature := r.Header.Get("X-Signature")
			timestamp := r.Header.Get("X-Timestamp")
			if apiKeyID == "" || signature == "" {
				writeError(w, 401, "Missing authentication headers")
				return
			}
			// 1. Находим ключ по public ID
			apiKey, err := db.GetAPIKey(apiKeyID)
			if err != nil || !apiKey.IsActive {
				writeError(w, 401, "Invalid API key")
				return
			}
			// 2. Timestamp проверка (анти-replay, ±5 сек)
			ts, _ := strconv.ParseInt(timestamp, 10, 64)
			if abs(time.Now().UnixMilli()-ts) > 5000 {
				writeError(w, 401, "Timestamp out of range")
				return
			}
			// 3. Верификация подписи (HMAC-SHA256)
			body, _ := io.ReadAll(r.Body)
			r.Body = io.NopCloser(bytes.NewBuffer(body))
			message := r.Method + r.URL.RequestURI() + timestamp + string(body)
			// Используем секрет из кэша (hash recovery невозможен — нужен отдельный cache)
			if !verifyHMAC(message, apiKey.SecretForVerification, signature) {
				writeError(w, 401, "Invalid signature")
				return
			}
			// 4. IP whitelist
			if len(apiKey.IPWhitelist) > 0 {
				clientIP := getClientIP(r)
				if !contains(apiKey.IPWhitelist, clientIP) {
					writeError(w, 403, "IP not whitelisted")
					return
				}
			}
			// 5. Обновляем last_used_at асинхронно
			go db.UpdateLastUsed(apiKey.ID)
			// Передаём контекст
			ctx := context.WithValue(r.Context(), "api_key", apiKey)
			next.ServeHTTP(w, r.WithContext(ctx))
		})
	}
}

הערה חשובה: אימות HMAC דורש ידיעת הסוד, אך אנו מאחסנים רק hash של bcrypt. פתרון: בעת יצירת מפתח, אנו מאחסנים את הסוד בצורה מוצפנת (AES-256 עם מפתח מ-HSM) אך ורק לצורך אימות HMAC, לא להצגה למשתמש.

בדיקות הרשאות

func RequirePermission(perm string) func(http.Handler) http.Handler {
	return func(next http.Handler) http.Handler {
		return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
			apiKey := r.Context().Value("api_key").(APIKey)
			hasPermission := false
			switch perm {
			case "spot_trade":
				hasPermission = apiKey.Permissions.SpotTrade
			case "withdraw":
				hasPermission = apiKey.Permissions.Withdraw
			case "read_account":
				hasPermission = apiKey.Permissions.ReadAccount
			}
			if !hasPermission {
				writeError(w, 403, fmt.Sprintf("Permission denied: %s required", perm))
				return
			}
			next.ServeHTTP(w, r)
		})
	}
}
// Использование:
router.POST("/api/v1/orders", APIKeyAuthMiddleware(db), RequirePermission("spot_trade"), handler.PlaceOrder)
router.POST("/api/v1/withdrawals", APIKeyAuthMiddleware(db), RequirePermission("withdraw"), handler.CreateWithdrawal)

השוואת ארכיטקטורות מערכות עמלה

מאפיין בסיסי (תעריפים קבועים) גמיש (קבוצות ומפתחות API)
גמישות תעריפים אחד לכולם אישי לכל קבוצה
ניהול ידני בקוד דרך פאנל ניהול ומפתחות API
תשלומי שותפים לא כן, עם ביקורת לכל מפתח
אבטחה מינימלית Hashing, רשימת IP לבנה, יומן ביקורת
מדרגיות מוגבלת עד 100,000 RPS

הארכיטקטורה הגמישה עם מפתחות API טובה פי 3 מהקבועה במהירות ניהול התעריפים ופי 5 באבטחה בזכות hashing ורשימות לבנות. בנוסף, המערכת שלנו מפחיתה את זמן הפריסה ב-50% לעומת בנייה מאפס.

יומן ביקורת

כל בקשה ל-API מתועדת לצורכי אבטחה. יומן הביקורת מאוחסן בטבלה המחולקת לפי תאריך עם אינדקסים על type FeeGroup struct { ID int64 Name string // "Gold Trader", "Partner" MakerFee float64 TakerFee float64 ReferralPct float64 // 0.2 = 20% } type APIKey struct { // ... предыдущие поля FeeGroupID int64 } ו-FeeGroupID. מבנה: id, api_key_id, user_id, method, path, IP, status_code, latency. הנתונים נשמרים למשך 90 יום, ולאחר מכן נמחקים אוטומטית.

מה כלול בפיתוח מפתח מלא

שלב תוצאה לוח זמנים
ניתוח דרישות תיעוד עם לוגיקה עסקית וארכיטקטורה 3-5 ימים
עיצוב מסד נתונים דיאגרמת ER, סכמות טבלאות, מיגרציות 2-3 ימים
פיתוח API (Go/Rust) API מלא מסוג REST/WebSocket עם אימות 14-21 ימים
ממשק משתמש לניהול עמלות לוח בקרה ב-React עם טבלאות וחלונות מודאליים 10-14 ימים
בדיקות (יחידה, אינטגרציה, fuzz) כיסוי >90%, דוח אבטחה 5-7 ימים
פריסה ותיעוד גישת staging, מדריך מנהל 2-3 ימים

סה"כ: 4 עד 6 שבועות עד לפתרון מוכן. נבחן את הפרויקט שלך ביום עסקים אחד — צור קשר לייעוץ חינם.

המומחיות והערבויות שלנו

  • יותר מ-5 שנים בפיתוח חוזים חכמים ו-backend לבורסות באמצעות Solidity, Rust, Go.
  • יותר מ-50 פרויקטים מוצלחים: מ-DEX ועד פלטפורמות מרכזיות.
  • ערבות אבטחה: כל מערכת עוברת ביקורת קוד ובדיקות fuzz.
  • מהנדסים מוסמכים (ConsenSys Academy, Solidity Developer).
  • אנו מספקים חבילת תיעוד מלאה: מפרט API, מדריך מנהל, תוכנית תמיכה.
  • השגת זמינות של 99.9% עם התשתית החזקה שלנו.
  • עלות פרויקט טיפוסית נעה בין $15,000 ל-$30,000.

הזמן פיתוח של מערכת עמלות גמישה — כתוב לנו בטלגרם או בדוא"ל. קבל ייעוץ ארכיטקטוני והערכת עלות תוך יום.