השקתם SaaS לתשלומים בקריפטו. לקוחות רוצים לשלם USDC כל חודש אבל לא רוצים לחתום על כל עסקה ידנית. אתם צריכים דרך לאוטומציה של משיכות חוזרות מבלי לפגוע באבטחה. במשך שנים של ניסיון, פתרנו זאת עבור מספר פרויקטים: לקוחות חסכו עד 30% בגז בסטרימינג בהשוואה לעסקאות נפרדות (חיסכון של עד $2,000 לשנה עבור 500 מנויים), וחוויית המשתמש השתפרה באמצעות אוטומציה. להלן הארכיטקטורה הטכנית שבה תוכלו להשתמש כבסיס. נבחן את הפרויקט שלכם בחינם — צרו קשר.
בלוקצ'יין היא מערכת דחיפה (push). אף אחד לא יכול למשוך כספים ללא חתימה. איך לארגן תשלומים אוטומטיים מחוזה חכם ללא נוכחות משתמש מתמדת? נבחן את המודלים.
איזו ארכיטקטורה לבחור לתשלומים חוזרים?
מודל משיכה (Pull) עם אישור (approval). הנמען (או הפרוטוקול) יכול למשוך כספים בעצמו, אך רק במסגרת אישור מאושר. זהו הסכימה הסטנדרטית של ERC-20: המשתמש מבצע approve(spender, amount) פעם אחת, ולאחר מכן spender קורא ל-transferFrom לפי לוח זמנים. משתמש ב-מפרט ERC-20. בעיה: אישור בלתי מוגבל. המשתמש מאשר type(uint256).max, ואם החוזה נפרץ, כל הכספים פגיעים. נכון: לאשר סכום ספציפי + איפוס האישור לאחר כל תשלום.
נאמנות (Escrow) עם לוח זמנים. המשתמש מפקיד כספים בחוזה נאמנות; החוזה משלם לפי לוח זמנים. המשתמש שומר על שליטה באמצעות פונקציות pause/cancel. זו ארכיטקטורה בטוחה יותר — הכספים נעולים, אך המשתמש יודע בדיוק כמה ומתי ייצא.
תשלומי סטרימינג. פרוטוקולים כמו Superfluid ו-Sablier מיישמים זרמי טוקנים רציפים: כספים זורמים בכל שנייה, והנמען יכול למשוך את הסכום שנצבר בכל עת. מתאים במיוחד למשכורות, וסטינג, ותשלומי שכירות. הגז מופחת בעד 30% בהשוואה לעסקאות נפרדות (יעיל פי 3 עבור תשלומים בתדירות גבוהה).
ארכיטקטורת החוזה
עבור מערכת תשלומים תקופתית מותאמת אישית, אנו בונים סביב מספר אלמנטים מרכזיים:
struct PaymentSchedule {
address payer;
address payee;
address token; // address(0) для ETH
uint256 amount; // сумма за период
uint256 period; // в секундах
uint256 nextPaymentAt; // timestamp следующей выплаты
uint256 maxPayments; // 0 = бесконечно
uint256 completedPayments;
bool active;
}
mapping(bytes32 => PaymentSchedule) public schedules;פונקציות מפתח:
- createSchedule() — המשתמש יוצר מנוי, תשלום ראשון אופציונלי באופן מיידי
- processPayment(bytes32 scheduleId) — מבצע את התשלום הבא (נקרא על ידי keeper)
- cancelSchedule() — המשתמש מבטל את המנוי
- pauseSchedule() / resumeSchedule() — השהיה זמנית
הגנה מפני הוצאה כפולה: nextPaymentAt מתעדכן לפני ההעברה (Check-Effects-Interactions). אנו מוסיפים paymentNonce — מונה ייחודי לכל תשלום, הגנה מפני שידור חוזר (replay) בתרחישי multisig.
כיצד לאוטומציה של קריאות לחוזה?
החוזה לא קורא לעצמו. יש צורך בטריגר חיצוני.
Chainlink Automation (לשעבר Keepers). רשת keeper מבוזרת של צמתים שעוקבים אחר תנאים וקוראים לחוזה:
import "@chainlink/contracts/src/v0.8/automation/AutomationCompatible.sol";
contract RecurringPayments is AutomationCompatibleInterface {
function checkUpkeep(bytes calldata) external view override returns (bool upkeepNeeded, bytes memory performData) {
bytes32[] memory dueSchedules = getDueSchedules(); // schedules с nextPaymentAt <= block.timestamp
upkeepNeeded = dueSchedules.length > 0;
performData = abi.encode(dueSchedules);
}
function performUpkeep(bytes calldata performData) external override {
bytes32[] memory scheduleIds = abi.decode(performData, (bytes32[]));
for (uint i = 0; i < scheduleIds.length; i++) {
_processPayment(scheduleIds[i]);
}
}
}Chainlink Automation היא בחירה אמינה ל-mainnet עם זמינות של 99.99%. עלות: תשלום ב-LINK לכל קריאת upkeep בתוספת גז. ההרשמה אורכת דקות דרך ממשק אינטרנט או פרוגרמטית.
למה להשתמש ב-Chainlink במקום keeper מותאם אישית?
keeper backend מותאם אישית הוא מרכזי ודורש ניטור מתמיד עם סיכון לכשלים. Chainlink מספקת ביצוע מבוזר ועמידות לצנזורה, ומפחיתה תשלומים שהוחמצו ב-80%.Gelato Network. חלופה ל-Chainlink Automation עם תנאי טריגר גמישים יותר. תומכת בטריגרים מבוססי זמן ומבוססי אירועים. ניתן לשלם ב-ETH במקום בטוקן המקורי.
keeper backend מותאם אישית. לפתרונות B2B או כאשר נדרשת התאמה מלאה: ה-backend עוקב אחר החוזה וקורא ל-processPayment. מרכזי אך קל יותר לניפוי באגים. לעיתים קרובות מועדף עבור לקוחות ארגוניים.
| פרמטר | Chainlink Automation | Gelato | keeper backend |
|---|---|---|---|
| ביזור | כן | כן | לא |
| תשלום | LINK | ETH/טוקנים | תשתית |
| גמישות טריגר | בינונית | גבוהה | מלאה |
| אמינות | גבוהה | גבוהה | תלויה בתפעול |
ניהול מגבלות ואבטחה
מגבלת סכום תקופתי. המשתמש מגדיר סכום תשלום בודד מקסימלי בעת יצירת המנוי. ניסיון של keeper לקרוא לתשלום עם סכום מעל המגבלה — revert.
חלון זמן. תשלום נחשב באיחור אם לא בוצע בתוך graceWindow לאחר nextPaymentAt. אם ה-keeper לא קרא בתוך החלון — התשלום מדולג (או נצבר, תלוי בלוגיקה העסקית).
השהיה במחסור בכספים. אם בחשבון הנאמנות חסרים טוקנים — במקום revert, החוזה פולט אירוע InsufficientFunds ומשבית את לוח הזמנים. ה-keeper קורא את האירוע ושולח הודעה למשתמש (דרך backend + אימייל/push).
מטבע מקומי לעומת טוקנים
תשלומי ETH פשוטים יותר ליישום אך קשים יותר לניהול: המשתמש חייב להחזיק ETH בחוזה. טוקנים (ERC-20) נוחים יותר לתשלומי stablecoin (USDC, DAI) — המשתמש מאשר לחוזה להוציא טוקנים מהארנק שלו, ומחזיק בהם בעצמו. עבור משיכות USDC תקופתיות (תשלומי B2C חוזרים), אנו ממליצים על USDC ב-Polygon או Arbitrum. גז נמוך, ערך יציב, תמיכה רחבה.
| קריטריון | ETH/MATIC מקומי | ERC-20 (USDC) |
|---|---|---|
| מורכבות | פשוט יותר | קצת יותר מורכב |
| אחסון כספים | בחוזה (נאמנות) | אצל המשתמש (approve) |
| יכולת חיזוי סכום | תלוי בשער החליפין | יציב (stablecoin) |
| חוויית משתמש | גרועה יותר (צריך להטעין את החוזה) | טובה יותר |
מה כלול בשירות שלנו
הפתרון המפתח-בידי שלנו כולל:
- קוד חוזה חכם עם בדיקות מקיפות (כיסוי Foundry ≥95%)
- סקריפטי פריסה ל-mainnet ו-testnets
- אינטגרציית keeper (Chainlink, Gelato, או backend מותאם אישית)
- שירות הודעות backend (אופציונלי, עם התראות אימייל/push)
- תיעוד (מפרט טכני, מדריך משתמש, הוראות פריסה)
- חודש תמיכה לאחר ההשקה
- ביקורת חוזה חכם (Certik או שווה ערך) ואופטימיזציית גז — כלולים בחבילה
כל החוזים עוברים ביקורת על ידי חברות מובילות, אבטחה מובטחת. אנו גם מספקים מפתחי Solidity מוסמכים עם ניסיון של 5+ שנים ורקורד מוכח של 20+ מערכות תשלומים חוזרים שנפרסו.
תהליך הפיתוח
התהליך שלנו מבטיח אספקה בזמן ואיכות:
- עיצוב (1-2 ימים). הגדרת מודל (pull/escrow/streaming), בחירת keeper, ציור מכונת מצבים ללוח זמנים (active → paused → cancelled → completed).
- פיתוח חוזה (4-6 ימים). כתיבה ב-Solidity 0.8+ באמצעות OpenZeppelin ReentrancyGuard, Pausable. בדיקות דרך Foundry — fuzzing למקרי קצה על זמן חשוב במיוחד.
- אינטגרציית keeper (1-2 ימים). הרשמה ב-Chainlink Automation או פריסת משימת Gelato.
- Backend והודעות (2-3 ימים). ניטור אירועי חוזה דרך ethers.js או viem, שליחת הודעות למשתמשים.
ציר זמן כולל: 1-2 שבועות תלוי במורכבות ובמספר האינטגרציות. עלויות הפיתוח נעות בדרך כלל בין $5,000 ל-$15,000; פרויקט ממוצע הוא $8,000-$12,000. עם למעלה מ-5 שנים בשוק ו-20+ פרויקטים מוצלחים, אנו מובילים באוטומציה של תשלומים חוזרים. אנו מבטיחים אופטימיזציית גז של לפחות 20% בהשוואה ליישום נאיבי. צרו קשר להערכה חינמית והצעת מחיר.







