אנו מפתחים מערכות תרומות קריפטו מוכנות לשימוש עבור סטרימרים, בלוגרים וקרנות צדקה. בחמש שנות עבודה, נתקלנו בעשרות ניואנסים: מEthereum reorgs ועד התקפות dust על Solana. במבט ראשון, המשימה פשוטה: לקבל קריפטו מתורם. אבל בפועל, עולות כמה שאלות לא טריוויאליות. איך להציג סטטוס בזמן אמת? איך לעבוד עם רשתות וטוקנים שונים? מה לעשות עם dust אחרי gas? ואיך לא לאבד תרומה במהלך reorg של הרשת? להלן ארכיטקטורה מוכחת שיישמנו ביותר מ-15 פרויקטים. היא מאפשרת קבלת תרומות ב-USDC, USDT, ETH וטוקנים אחרים עם עמלות נמוכות ב-30% מהממוצע בשוק, הודות לאופטימיזציית gas ובחירת L2.
למה הסכמה המינימלית לא מתאימה לקנה מידה?
עבור זרימת תרומות חד-פעמית או בנפח נמוך, אין צורך בתשתית מורכבת. סכמה עם כתובת אחת:
- פרסום כתובת אחת (ETH/BTC/SOL) בעמוד
- ניטור Webhook דרך ספק (Alchemy Notify, Moralis, QuickNode)
- Webhook מפעיל את השרת האחורי → מעדכן את ממשק המשתמש של התורם בזמן אמת
// Alchemy Notify webhook handler app.post('/webhook/donations', express.raw({type: 'application/json'}), async (req, res) => { const isValid = verifyAlchemySignature(req.body, req.headers['x-alchemy-signature'], WEBHOOK_SECRET) if (!isValid) return res.sendStatus(401) const payload = JSON.parse(req.body.toString()) for (const activity of payload.event?.activity || []) { if (activity.toAddress.toLowerCase() === DONATION_ADDRESS.toLowerCase() && activity.value > 0) { await db.donations.create({ txHash: activity.hash, fromAddress: activity.fromAddress, amount: activity.value, asset: activity.asset, status: 'pending' }) io.emit('new_donation', { amount: activity.value, asset: activity.asset }) } } res.sendStatus(200) }) Webhooks אמינים יותר מ-polling: ספקים חוזרים על משלוח במקרה של כשל, ואתה לא מפספס עסקה. אבל סכמה זו נשברת תחת עומס גבוה: ללא תורים ומכונת מצבים, אתה יכול לאבד תרומה ל-reorg או לשכפול. לדוגמה, במהלך reorg של Ethereum (עומק 1–2 בלוקים), תרומות בשווי מאות דולרים עשויות להתהפך — ללא מכונת מצבים, תזקוף אותן ולא תוכל לבטל.
איך להימנע מאובדן תרומות במהלך reorg?
אנו בונים מכונת מצבים עם ארבעה מצבים: // Alchemy Notify webhook handler app.post('/webhook/donations', express.raw({type: 'application/json'}), async (req, res) => { const isValid = verifyAlchemySignature(req.body, req.headers['x-alchemy-signature'], WEBHOOK_SECRET) if (!isValid) return res.sendStatus(401) const payload = JSON.parse(req.body.toString()) for (const activity of payload.event?.activity || []) { if (activity.toAddress.toLowerCase() === DONATION_ADDRESS.toLowerCase() && activity.value > 0) { await db.donations.create({ txHash: activity.hash, fromAddress: activity.fromAddress, amount: activity.value, asset: activity.asset, status: 'pending' }) io.emit('new_donation', { amount: activity.value, asset: activity.asset }) } } res.sendStatus(200) }) (עסקה ב-mempool), detected (נכללה בבלוק, ממתינה לאישורים), confirming (הושג מספר האישורים הנדרש), confirmed (reorg או נפילה). עבור ETH mainnet — 6 אישורים, עבור L2 (Arbitrum, Base, Optimism) — 1–2 מספיקים (סופיות L2 מהירה יותר, reorgs נדירים). עבור BTC — אישור אחד לסכומים קטנים, 3+ לגדולים. מערכת זו מגנה מפני אובדן תרומות ואינה דורשת התערבות ידנית.
איך אנו בונים מערכת תרומות קריפטו אמינה?
אנו מתכננים את המערכת מאפס עבור התרחיש שלך. רכיבים עיקריים:
| רכיב | טכנולוגיה | מטרה |
|---|---|---|
| ניטור בלוקצ'יין | Alchemy Notify / QuickNode Streams | קבלת עסקאות בזמן אמת |
| שרת אחורי | Node.js (Express) + תור Bull | עיבוד, הסרת כפילויות, מכונת מצבים |
| מסד נתונים | PostgreSQL | אחסון תרומות, משתמשים, ווידג'טים |
| זמן אמת | Socket.io | שליחת התראות לווידג'טים ולדשבורד |
| ווידג'ט | HTML/CSS/JS (הרכבת Webpack) | חלון קופץ הניתן להתאמה עבור OBS |
| דשבורד | React + Recharts | סטטיסטיקת תרומות, ייצוא CSV |
אישורים: מתי להחשיב תרומה כמתקבלת
אל תחשיב תרומה כסופית עם ההתראה הראשונה. אנו מיישמים מכונת מצבים עם מספר אישורים הניתן להגדרה — זה מבטיח שלא תזקוף עסקה שהתהפכה.
ווידג'ט לסטרימרים / התראות בזמן אמת
התרחיש הנפוץ ביותר: סטרימר רוצה לקבל תרומות קריפטו עם התראה קופצת ב-OBS. ארכיטקטורה:
Blockchain → Webhook Provider → Backend API → WebSocket (Socket.io) → OBS Browser Source ווידג'ט — דף HTML עם חיבור WebSocket:
<!-- OBS Browser Source URL: https://yourapp.com/widget?streamer_id=123 --> <script> const socket = io('wss://yourapp.com') socket.on('donation', (data) => { showDonationAlert(data.sender, data.amount, data.currency, data.message) }) </script> ריבוי מטבעות ללא מורכבות מיותרת
למערכת קטנה — קבל USDC/USDT במספר רשתות בתוספת ETH מקורי. זה מכסה 90% מהקהל. תן לתורם בחירת רשת — ETH mainnet, Arbitrum, Base, Polygon — זה מוריד את החסם (gas ב-L2 זול יותר).
זיהוי תרומה לפי רשת + כתובת + טוקן:
def identify_donation(network: str, token: str, amount: float, tx_hash: str) -> Donation: usd_value = convert_to_usd(token, amount, network) return Donation( tx_hash=tx_hash, network=network, token=token, raw_amount=amount, usd_value=usd_value, confirmed=False ) איך להוסיף רשת חדשה למערכת?
הוראות שלב-אחר-שלב למנהל שלך:
- בדשבורד, בחר "הוסף רשת" וציין את נקודת הקצה RPC (Infura, Alchemy, QuickNode).
- ציין את כתובת הארנק לקבלת תרומות ברשת זו.
- הגדר webhook לאותה כתובת URL כמו לרשתות אחרות (המערכת מזהה אוטומטית את הרשת לפי chainId).
- הפעל את הרשת — תוך דקה, תרומות יתחילו להתעבד.
מה כלול בעבודה
| מסמך / תוצאה | תיאור |
|---|---|
| מפרט טכני | תיאור ארכיטקטורה, בחירת ספק וערימת טכנולוגיות |
| קוד מקור | מאגר עם שרת אחורי, ווידג'ט ודשבורד |
| פריסה | הגדרת שרת, דומיין, SSL, CI/CD |
| גישות ספק | Alchemy/QuickNode, מסד נתונים, אירוח |
| מדריך תפעול | איך להוסיף רשתות, טוקנים, להגדיר ווידג'ט |
| הדרכת צוות | שעתיים של ייעוץ למנהל |
| תמיכה | חודש לאחר ההשקה (באגים, שאלות) |
לוח זמנים ועלות
מערכת בסיסית עם ארנק אחד, webhook וווידג'ט — 3–5 ימי פיתוח. מלאה עם ריבוי מטבעות, דשבורד ותמיכה במספר רשתות — 1–2 שבועות. העלות מחושבת באופן אישי לאחר בריף. צור קשר להערכה — נייעץ בחינם ונציע ארכיטקטורה אופטימלית. הניסיון שלנו: יותר מ-15 הטמעות, הפחתת עלויות gas עד 40% באמצעות שימוש ב-L2 ועיבוד עסקאות בקבוצות.







