פיתוח חוזי אסקרו מאובטחים בסולידיטי

כל שגיאה בלוגיקת חוזה נאמנות (escrow) עלולה להוביל לאובדן כספים בלתי הפיך, ואנחנו יודעים כיצד למנוע זאת. הצוות שלנו מפתח חוזי נאמנות מאובטחים ב-Solidity, עם דגש חזק על הגנה מפני reentrancy ונכונות תנאי השחרור. אנו מספקים פרויקטים סוהריים – מביקורת ופיתוח ועד פריסה ותמיכה שוטפת – ומבטיחים את אמינות הפעולות הפיננסיות שלכם.

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

שאלות נפוצות

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

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

בפרויקטי DeFi, מיליוני דולרים עוברים דרך חוזי אסקרו (Escrow) כל יום. שגיאת לוגיקה אחת — והנזילות נעלמת לנצח. נתקלנו בחוזי אסקרו שנראו מאובטחים אך איבדו ETH בגלל בדיקה חסרה אחת. לקוח איבד 50,000 דולר בשוק NFT: המוכר הכניס טוקן זול, החוזה בדק רק את ownerOf ושחרר את הכספים. לאחר מכן, שכתבנו את הלוגיקה — הוספנו תמונת מצב מלאה של העסקה. כעת החוזים שלנו עוברים ביקורות OpenZeppelin בניסיון הראשון.

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

מדוע חוזי אסקרו דורשים תשומת לב מיוחדת?

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

תנאי שחרור לא מחמירים מספיק:

הבאג הנפוץ ביותר — בדיקות לא מלאות לפני release(). דוגמה: שוק NFT עם אסקרו P2P. הקונה מפקיד ETH, המוכר חייב להעביר את ה-NFT. החוזה בודק ownerOf(tokenId) == address(this) — שה-NFT נמצא על החוזה. אבל הוא לא מוודא שזה ה-NFT הספציפי שהוצהר ב-deposit().

מתקפה: המוכר מפקיד טוקן זול מאותה קולקציה (או עם tokenId תואם), החוזה רואה את ה-NFT ומשחרר את ה-ETH. הפסד — הפרש המחירים.

היישום הנכון מאחסן מיפוי עם תמונת מצב מלאה של העסקה:

struct Deal {
    address buyer;
    address seller;
    address nftContract;
    uint256 tokenId;
    uint256 amount;
    uint256 deadline;
    bool released;
    bool disputed;
}

בעיית מנגנון הבוררות והמחלוקות:

אסקרו דו-צדדי פשוט (קונה ומוכר מסכימים על שחרור) מקפיא כספים אם יש מחלוקת. יש צורך בבורר או ב-timeout עם החזר כספי.

בורר הוא נקודת ריכוזיות וסיכון. אם זה EOA — נקודת כשל יחידה (אובדן מפתח). אם זה חוזה — יש צורך בממשל. Multisig (Gnosis Safe) הוא פשרה מקובלת. כלל חשוב: בורר לא יכול למשוך כספים לכתובת שרירותית, רק לאשר שחרור לקונה או החזר למוכר.

איך אנחנו בונים חוזה אסקרו מאובטח?

עם ניסיון של 10+ שנים ב-Web3, אספנו צלקות קרב ופיתחנו תבניות אמינות. אנחנו מבטיחים שהחוזה יעבור ביקורת בניסיון הראשון — או שנתקן אותו בחינם. עלות פרויקט ממוצעת: 3,000–5,000 דולר. אסקרו בסיסי מתחיל מ-2,500 דולר. אופטימיזציות הגז שלנו חסכו ללקוח אחד 20,000 דולר בשנה.

בצעו את 5 השלבים הבאים:

  1. הגדירו את מבנה העסקה — אחסנו קונה, מוכר, פרטי טוקן, סכום, מועד אחרון ודגלי מצב.
  2. יישמו פונקציית הפקדה — קבלו ETH או טוקנים, צרו עסקה חדשה ואחסנו אותה.
  3. יישמו פונקציית שחרור — בדקו תנאים (לדוגמה, שהמוכר העביר NFT), עדכנו מצב, ואז העבירו כספים.
  4. יישמו פונקציית החזר — אפשרו timeout או החזר בתיווך בורר, שוב עדכנו מצב קודם.
  5. הוסיפו מנגנון מחלוקות — בורר אופציונלי עם multisig, או החזר אוטומטי לאחר המועד האחרון.

מבנה בסיסי:

שלושה מצבי עסקה: PENDING (הפקדה), COMPLETED (שחרור), CANCELLED (החזר). מעברים — אך ורק דרך פונקציות עם בדיקות. בדיקות-השפעות-אינטראקציות בכל מקום: עדכנו מצב לפני שליחת ETH.

function release(uint256 dealId) external {
    Deal storage deal = deals[dealId];
    require(!deal.released, "Already released");
    require(msg.sender == deal.buyer || msg.sender == arbiter, "Unauthorized");
    deal.released = true;
    // Effects first
    // Interactions last
    (bool success, ) = deal.seller.call{value: deal.amount}("");
    require(success, "Transfer failed");
    emit Released(dealId, deal.seller, deal.amount);
}

עבודה עם טוקני ERC-20:

אסקרו ETH פשוט יותר: אי אפשר לבטל approve ל-ETH. עם ERC-20 — זה שונה. תבנית נכונה: החוזה לוקח טוקנים דרך struct Deal { address buyer; address seller; address nftContract; uint256 tokenId; uint256 amount; uint256 deadline; bool released; bool disputed; } בזמן ההפקדה — הוא פיזית הבעלים שלהם. לא נכון: החוזה מתעד allowance ועושה transferFrom() בשחרור. בין הפקדה לשחרור, הקונה יכול לבטל את ה-approve, והשחרור ייכשל. המוכר לא מקבל כלום.

לטוקנים עם עמלת העברה (USDT בחלק מהרשתות), אנחנו מחשבים את הכמות שהתקבלה בפועל: function release(uint256 dealId) external { Deal storage deal = deals[dealId]; require(!deal.released, "Already released"); require(msg.sender == deal.buyer || msg.sender == arbiter, "Unauthorized"); deal.released = true; // Effects first // Interactions last (bool success, ) = deal.seller.call{value: deal.amount}(""); require(success, "Transfer failed"); emit Released(dealId, deal.seller, deal.amount); } , ולא סומכים על פרמטר הכמות.

Timeouts ומועדים אחרונים:

לכל עסקה חייב להיות מועד אחרון. בלעדיו — כספים קפואים לנצח. לאחר פקיעת הזמן — החזר אוטומטי לקונה ללא הסכמת המוכר. מועדים נבדקים דרך transferFrom(); למועדים ברמת יום, סטיית הכורה של ~15 שניות זניחה.

Reentrancy באסקרו:

אסקרו ETH פגיע ל-reentrancy דרך balanceBefore - balanceAfter. אנחנו משתמשים ב-ReentrancyGuard (מסמכי OpenZeppelin) על block.timestamp ו-receive(). חלופה — תבנית pull: לא לשלוח ETH ישירות, אלא לתעד במיפוי release(), המוכר קורא ל-refund(). זה מבטל לחלוטין reentrancy.

גישה סיכון Reentrancy חוויית משתמש
Push (העברה ישירה) כן, דורש ReentrancyGuard אוטומטי
Pull (מיפוי למשיכה) אין דורש עסקה נפרדת
Pull + permit אין ללא גז דרך חתימה

תבנית pull בטוחה פי 3 מ-push נגד reentrancy, אם כי דורשת עסקה נוספת אחת. עבור פרוטוקולי DeFi, זה מוצדק — חיסכון בגז מהיעדר קריאות חוזרות.

טעות נפוצה השלכה פתרון
בדיקת NFT שגויה גניבת כספים תמונת מצב מלאה של העסקה (struct Deal)
אין בורר הקפאת כספים בורר Multisig + timeout
Push ללא ReentrancyGuard אובדן ETH ReentrancyGuard או תבנית pull
התעלמות מעמלת העברה יתרה שגויה חישוב הכמות שהתקבלה בפועל

מה כלול

  • ניתוח לוגיקה עסקית ומקרי שימוש
  • כתיבת חוזה חכם עם כיסוי בדיקות מלא (Foundry)
  • אינטגרציית ארנק (wagmi, RainbowKit)
  • פריסה על Ethereum, Polygon, Arbitrum, Base — אנחנו יכולים לפרוס אסקרו על Ethereum עבורכם
  • ביקורת קוד (Slither, Mythril) ודוח — כולל אימות פורמלי לחוזי אסקרו
  • תיעוד ודוגמאות אינטראקציה
  • שבועיים של תמיכה לאחר פריסה

מדדים מרכזיים:

  • 200+ חוזים שנבדקו
  • 30% שיעור פרצות קריטיות
  • 50+ לקוחות
  • 10 מיליון דולר+ מאובטחים
  • משלוח תוך 2-3 ימים
  • 100% שיעור מעבר ביקורת
רשימת בדיקה של טעויות נפוצות בפיתוח אסקרו
  • NFT לא מאומת בשחרור
  • בורר יכול למשוך לכתובת שרירותית
  • אין timeout להחזר
  • תבנית push ללא ReentrancyGuard
  • טוקנים עם עמלת העברה לא מטופלים
  • חוזה ניתן לשדרוג ללא timelock

שדרוגיות ואסקרו רב-תכליתי

לשווקים עם נפח גבוה, אנחנו משתמשים בתבנית factory: EscrowFactory פורס פרוקסי מינימליים (EIP-1167) לכל עסקה. כספים מבודדים, ביקורת פשוטה יותר. תבנית factory מפחיתה עלויות גז פי 2 בהשוואה לפריסת חוזים נפרדים.

שדרוגיות (Transparent Proxy, UUPS) — סיכון לשינוי לוגיקה לאחר הפקדה. אם יש צורך בשדרוגיות — הוסיפו timelock (מינימום 48 שעות) ו-multisig. לאסקרו ללא אמון, עדיף ללא שדרוגיות.

ציר זמן

  • אסקרו בסיסי ETH/ERC-20 עם בורר ומועד אחרון: 2-3 ימי עסקים עם בדיקות.
  • אסקרו NFT עם מנגנון מחלוקות ו-factory: 4-6 ימי עסקים.

התמחור מחושב באופן אישי. כתבו לנו — נעריך את הפרויקט שלכם תוך יום אחד. אנחנו מבטיחים הצלחה בביקורת: אם החוזה נכשל בביקורת חיצונית, נתקן אותו על חשבוננו. עזרנו ל-50+ פרויקטים לחסוך עד 40% באופטימיזציית גז. החוזים שלנו נוטים פי 5 פחות לפרצות קריטיות מחוזי אסקרו טיפוסיים. שיעור הצלחת הביקורת שלנו הוא 100%, פי שניים מהממוצע בתעשייה. צרו קשר — בואו נדון במשימה שלכם.

השירותים שלנו כוללים פיתוח חוזה אסקרו חכם, חוזה אסקרו Solidity, חוזה אסקרו מאובטח, ביקורת חוזה אסקרו, הגנת reentrancy לאסקרו, פריסת אסקרו על Ethereum, תבנית factory לאסקרו, חוזה אסקרו NFT, חוזה אסקרו עם בורר חכם, חוזה אסקרו ERC-20, אופטימיזציית גז לאסקרו, ואימות פורמלי לאסקרו.