פיתוח מערכת הפקדה ומשיכה של קריפטו

אובדן כספים כתוצאה משגיאות בטיפול ב-blockchain reorgs או ב-gas wars מהווה סיכון חמור לכל בורסת קריפטו. אנחנו בונים מערכות הפקדה ומשיכה עמידות לתרחישים כאלה, תוך שימוש בתבניות אבטחה מוכחות. הצוות שלנו מספק את הפרויקט במפתח מלא—מארכיטקטורה ועד יישום ותמיכה מתמשכת—ומבטיח אמינות וסקלביליות לעסק שלכם.

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

שאלות נפוצות

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

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

אחד התרחישים הנפוצים ביותר לאובדן כספים בבורסה הוא שגיאה בעיבוד ארגון מחדש של שרשרת בלוקים (reorg): עסקה נחשבת מאושרת, אך הבלוק מתגלגל לאחור, והכסף נעלם. נקודת כאב נוספת היא מלחמות גז: בעת משיכת ETH, מחיר הגז מזנק, העסקה נתקעת, והמשתמשים נכנסים לפאניקה. אנו בונים מערכת הפקדה ומשיכה שעמידה בפני מצבים כאלה. הארכיטקטורה מבוססת על תבניות מוכחות: multi-sig, HSM, טיפול אוטומטי ב-reorg, וניהול גז אדפטיבי.

לצוות שלנו יש ניסיון של 5+ שנים בפיתוח בלוקצ'יין, והוא יישם למעלה מ-50 פרויקטים עבור בורסות קריפטו ופרוטוקולי DeFi. אנו מבטיחים שמערכת ההפקדה והמשיכה שלך תעמוד בסטנדרטים הטובים ביותר בתעשייה. צור איתנו קשר כדי לדון בארכיטקטורת הבורסה שלך — נבחן את הפרויקט ונציע את הפתרון האופטימלי.

כיצד נוצרות כתובות הפקדה?

כל משתמש מקבל כתובת הפקדה ייחודית עבור כל רשת. קיימות שתי גישות.

HD Wallet (Hierarchical Deterministic). עץ מפתחות דטרמיניסטי נוצר מזרע אב יחיד לפי BIP-32 ו-BIP-44. עבור ביטקוין: m/44'/0'/0'/0/{user_index}. עבור Ethereum: m/44'/60'/0'/0/{user_index}.

import { HDNodeWallet } from "ethers";
const masterNode = HDNodeWallet.fromMnemonic(Mnemonic.fromPhrase(MASTER_MNEMONIC));

function getDepositAddress(userId: number, coinIndex: number): string {
  // m/44'/coinIndex'/0'/0/userId
  const child = masterNode
    .deriveChild(44 + 0x80000000) // purpose
    .deriveChild(coinIndex + 0x80000000) // coin type
    .deriveChild(0 + 0x80000000) // account
    .deriveChild(0) // external
    .deriveChild(userId);
  return child.address;
}

הזרע האב מאוחסן ב-HSM או בכספת מוצפנת (HashiCorp Vault). מפתחות ציבוריים ליצירת כתובות נמצאים במסד הנתונים, מפתחות פרטיים לחתימה נמצאים רק ב-HSM.

כתובת משותפת + memo — כתובת אחת לכל הבורסה, המשתמש מציין memo/tag. משמש עבור Ripple (XRP), Stellar (XLM), Cosmos. זול יותר לתחזוקה, אך שגיאה ב-memo מובילה לאובדן כספים.

ניטור עסקאות נכנסות

שירות הניטור נרשם לאירועי בלוקצ'יין:

  • רשתות EVM: import { HDNodeWallet } from "ethers"; const masterNode = HDNodeWallet.fromMnemonic(Mnemonic.fromPhrase(MASTER_MNEMONIC)); function getDepositAddress(userId: number, coinIndex: number): string { // m/44'/coinIndex'/0'/0/userId const child = masterNode .deriveChild(44 + 0x80000000) // purpose .deriveChild(coinIndex + 0x80000000) // coin type .deriveChild(0 + 0x80000000) // account .deriveChild(0) // external .deriveChild(userId); return child.address; } דרך WebSocket לצומת + סקירת eth_subscribe("logs", { address: [depositAddresses], topics: [ERC20_TRANSFER_TOPIC] }) כגיבוי
  • ביטקוין: eth_getBlockByNumber מ-Bitcoin Core + סריקה תקופתית של כתובות דרך zmqpubrawtx
  • TRON: TronGrid WebSocket או סקירת TronScan API
type DepositMonitor struct {
    node EthClient
    db *DB
    confirmations int // минимум подтверждений
}

func (m *DepositMonitor) ProcessBlock(blockNum uint64) {
    receipts := m.node.GetBlockReceipts(blockNum)
    for _, receipt := range receipts {
        for _, log := range receipt.Logs {
            if !isERC20Transfer(log) {
                continue
            }
            to := common.HexToAddress(log.Topics[2].Hex())
            if !m.db.IsDepositAddress(to) {
                continue
            }
            m.recordPendingDeposit(Deposit{
                TxHash: receipt.TxHash,
                BlockNum: blockNum,
                UserAddress: to,
                Token: log.Address,
                Amount: new(big.Int).SetBytes(log.Data),
            })
        }
    }
}

אישורים וסופיות

מספר האישורים הנדרש תלוי ברשת ובסכום:

רשת אישורים מינימליים סיבה
ביטקוין 3–6 הסתברות ל-reorg
Ethereum 12–20 (או finalized) סופיות לאחר המיזוג
Polygon PoS 100–256 סופיות checkpoint
BSC 15–20 PoSA, יותר מרכזי
TRON 19 קונצנזוס מוצק
Solana 32 (finalized) Tower BFT

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

טיפול ב-reorg: אחסון type DepositMonitor struct { node EthClient db *DB confirmations int // минимум подтверждений } func (m *DepositMonitor) ProcessBlock(blockNum uint64) { receipts := m.node.GetBlockReceipts(blockNum) for _, receipt := range receipts { for _, log := range receipt.Logs { if !isERC20Transfer(log) { continue } to := common.HexToAddress(log.Topics[2].Hex()) if !m.db.IsDepositAddress(to) { continue } m.recordPendingDeposit(Deposit{ TxHash: receipt.TxHash, BlockNum: blockNum, UserAddress: to, Token: log.Address, Amount: new(big.Int).SetBytes(log.Data), }) } } } יחד עם pending. כאשר מתגלה reorg (hash של בלוק השתנה), סמן עסקאות מושפעות כ-block_hash והפעל מחדש את הניטור.

כיצד מתבצע איחוד כספים (sweeping)?

כתובות הפקדה נמנות באלפים או מיליונים. אחסון ETH בכל כתובת הוא יקר ולא מאובטח. יש צורך באיחוד אוטומטי לארנק חם ראשי:

func (s *Sweeper) SweepAddress(depositAddr Address) error {
    balance, _ := s.node.GetBalance(depositAddr)
    if balance.Cmp(s.minSweepAmount) < 0 {
        return nil // не стоит газа
    }
    // Для ERC20: сначала нужно отправить ETH на газ
    if s.token != ETH {
        gasCost := estimateGas(depositAddr, HOT_WALLET, token)
        s.fundGas(depositAddr, gasCost)
    }
    // Подписываем через HSM — приватный ключ depositAddr никогда не покидает HSM
    tx := s.buildTransfer(depositAddr, HOT_WALLET, balance)
    signed := s.hsm.Sign(depositAddr, tx)
    return s.node.SendRawTransaction(signed)
}

עבור טוקני ERC20, המשימה מסובכת: יש צורך ב-ETH לגז בכתובת ההפקדה. פתרונות:

  1. תחנת גז: שלח ETH לפני ה-sweep, ואז בצע sweep לטוקנים
  2. Sweep ללא גז דרך EIP-2612/permit: אם הטוקן תומך ב-permit, הבורסה משלמת את הגז בעצמה
  3. Sweep בקבוצות דרך multicall: קריאה אחת אוספת כספים מכתובות מרובות

החיסכון בגז בעת שימוש ב-batch sweep יכול להגיע ל-$40,000 בחודש בנפחים גבוהים.

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

משיכה עוברת מספר שלבים:

REQUESTED → VALIDATED → APPROVED → SIGNING → BROADCASTING → PENDING → CONFIRMED 

VALIDATED: בדיקת יתרה, מגבלות, AML/KYC. אם עבר — שמור כספים (הפחת מהיתרה הזמינה).

APPROVED: עבור סכומים גדולים — בדיקה ידנית על ידי מפעיל הבורסה או חתימה מרובה (אישור M-of-N ממספר מפעילים). עבור סכומים קטנים — אישור אוטומטי.

SIGNING: חתום על העסקה ב-HSM או במערכת ארנק קר. לעולם אל תחתום על השרת שבו מאוחסנת לוגיקת האישור — הפרדת תפקידים.

BROADCASTING: שלח את העסקה לרשת. לאחר מכן, לא ניתן לבטל את העסקה.

ניהול גז

הבורסה חייבת לשלם גז עבור משיכות. יש צורך במערכת ניהול גז:

  • ניטור block_number / EIP-1559 reorged + func (s *Sweeper) SweepAddress(depositAddr Address) error { balance, _ := s.node.GetBalance(depositAddr) if balance.Cmp(s.minSweepAmount) < 0 { return nil // не стоит газа } // Для ERC20: сначала нужно отправить ETH на газ if s.token != ETH { gasCost := estimateGas(depositAddr, HOT_WALLET, token) s.fundGas(depositAddr, gasCost) } // Подписываем через HSM — приватный ключ depositAddr никогда не покидает HSM tx := s.buildTransfer(depositAddr, HOT_WALLET, balance) signed := s.hsm.Sign(depositAddr, tx) return s.node.SendRawTransaction(signed) }
  • תקציב גז: התחשבות בעלות הגז בעלות המשיכה או בעמלה
  • RBF (Replace By Fee) עבור עסקאות ביטקוין תקועות
  • הגדלת EIP-1559: כאשר עסקת Ethereum נתקעת — שלח מחדש עם אותו nonce ו-REQUESTED → VALIDATED → APPROVED → SIGNING → BROADCASTING → PENDING → CONFIRMED מוגדל

הודעות וסטטוסים

המשתמש חייב לראות את סטטוס המשיכה בזמן אמת. אינטגרציה:

  • WebSocket push בכל שינוי סטטוס
  • הודעות דוא"ל/טלגרם בשלבים מרכזיים (אישור, שליחה, אישור)
  • Hash של עסקה עם קישור לסייר מיד לאחר השידור

כיצד מובטחת האבטחה?

בדיקות קריטיות:

  • רשימת כתובות מורשות: דרישה להוספת כתובת חדשה 24-48 שעות לפני משיכה אליה. בעת הוספה — אישור בדוא"ל + 2FA.
  • אנטי-פישינג: הצגת קוד אנטי-פישינג בדוא"ל ובממשק המשתמש (המשתמש מגדיר אותו). אם הוא חסר — חשדני.
  • מגבלות משיכה: מגבלות יומיות לפי רמות KYC. אם חריגה — בדיקה ידנית.
  • בדיקות מהירות: משיכות מרובות בפרק זמן קצר → חסימה זמנית והודעה.

הפרדת ארנקים חם/חמים/קר

  • ארנק חם: רזרבה תפעולית קטנה (10-20% מנפח המשיכה היומי), תמיד מקוון, משיכות אוטומטיות
  • ארנק חמים: multi-sig (2-of-3 או 3-of-5 מפתחות חומרה), ממלא את הארנק החם פעם ביום
  • ארנק קר: אחסון לא מקוון, רק עבור רזרבות גדולות, נוהל גישה ידני

חלוקה: 5-10% חם, 15-20% חמים, 70-80% קר. המספרים הספציפיים תלויים בנפחים ובמודל הסיכון של הבורסה.

תשתית ואמינות

צומת לעומת ספק API: צומת מלא נותן אמינות ועצמאות. ספקי API (Alchemy, QuickNode, Infura) — נוחות אך תלות בצד שלישי. עבור בורסה בייצור: מספר ספקים + צומת משלך, עם failover אוטומטי.

Idempotency: לכל בקשת משיכה יש eth_gasPrice ייחודי. עיבוד חוזר של אותו ID לא יוצר עסקה כפולה. קריטי לשחזור לאחר תקלות.

ניטור עסקאות: לאחר השידור — בדיקה תקופתית של סטטוס העסקה. אם לאחר N דקות היא לא ב-mempool — ראה אותה כנפלה, שלח מחדש עם nonce נכון.

מה כלול בעבודה

  • תיעוד ארכיטקטורה: תיאור סכמת ארנק קר/חמים/חם, לוגיקת אישורים, סכמת חתימה ושחזור מאסון.
  • קוד מקור עם אינטגרציה של HSM, multi-sig, ניהול גז ובדיקות AML.
  • פריסה והתקנה: הגדרת צומת, מאזני עומס, ניטור (Prometheus/Grafana).
  • תיעוד API עבור frontend ופאנל ניהול.
  • הכשרת צוות: סדנה על תפעול המערכת ותגובה לאירועים.
  • אחריות ל-3 חודשים על באגים שזוהו וייעוץ חינם בנושא שינויים.

לוחות זמנים משוערים

רכיב משך
הפקדות/משיכות Ethereum + ERC20 4-6 שבועות
ביטקוין 3-4 שבועות
TRON 2-3 שבועות
כל רשת EVM נוספת 1-2 שבועות
ניהול ארנק חם רב-מטבעי 3-4 שבועות
לוח מחוונים לניהול וניטור 2-3 שבועות

מערכת מלאה עבור 5-7 רשתות עם אינטגרציית HSM, בדיקות AML וממשק ניהול — 3-5 חודשים. העלות מחושבת באופן אישי לאחר ביקורת על הפרויקט שלך.

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