תארו לעצמכם שאתם מוכרים NFT תמורת 10 ETH לזר בעיר אחרת. ללא אסקרו, אחד מכם לוקח סיכון. שירותים קלאסיים סומכים על מתווך, אבל בקריפטו צד "מהימן" הוא או פלטפורמה מרכזית (פגיעה לחסימות רגולטוריות) או חוזה חכם: הוא אף פעם לא ישן, לא לוקח שוחד, ומבצע קוד בצורה דטרמיניסטית. אנו מפתחים חוזי אסקרו מוכנים לשימוש עם בוררות, פסקי זמן ותמיכה בכל טוקן. במשך יותר מ-5 שנים בנינו יותר מ-20 מערכות עם TVL כולל העולה על 5 מיליון דולר, כל אחת מאומתת פורמלית. החוזים שלנו מוגנים מפני reentrancy, front-running והתקפות flash loan. קבלו ייעוץ חינם—נעריך את הפרויקט שלכם ללא עלות.
למה חוזה אסקרו בטוח יותר מהפקדה בבורסה
בורסות מרכזיות ושירותי אסקרו מחזיקים את הכספים שלכם בארנקים שלהם. במקרה של פריצה או הקפאה רגולטורית, הכסף ננעל. לחוזה חכם אין גורם אנושי: הקוד פתוח, מבוקר ובלתי ניתן לשינוי לאחר הפריסה. חוזה חכם מבוקר מפחית את סיכון ההונאה פי 5 בהשוואה לשירות אסקרו מרכזי. עלות הפיתוח של חוזה כזה נקבעת לאחר ניתוח—בדרך כלל חלק קטן מהחיסכון בעמלות הפלטפורמה.
מכניקה בסיסית והיכן היא נשברת
אסקרו פשוט: הקונה מפקיד כספים → המוכר ממלא את התנאי → הקונה מאשר → הכספים משוחררים. בעיה: אם הקונה לעולם לא מאשר, הכספים ננעלים לנצח. סכמה נכונה מינימלית דורשת:
- פסק זמן עם החזר אוטומטי—אם הקונה לא אישר תוך N ימים, המוכר יכול לבקש החזר. או להיפך: אם המוכר לא מספק, הקונה מושך את ההפקדה.
- בוררות—צד שלישי עם סמכות עליונה: בורר ספציפי (כתובת), multisig או DAO.
- מודל פיזור—הבורר לא מחזיק בכספים אלא מחליט על חלוקה (לדוגמה, 75% לקונה, 25% למוכר).
איך למנוע קשירת קשר של הבורר?
החלק הקשה ביותר הוא לא המכניקה אלא מודל הבוררות. אם לבורר יש כוח מוחלט, הוא הופך למטרה להתקפה (שוחד, פריצת מפתח). אם הוא נבחר על ידי הצדדים, יש סיכון לקשירת קשר. דפוסים מעשיים:
- בוררות commit-reveal. שני הצדדים שולחים החלטות מוצפנות; הבורר חושף את שלו רק לאחר קבלת שתיהן. לא מבטל קשירת קשר אבל מסבך אותה.
- בוררות claim-opponent (בסגנון ERC-792). כל צד מספק hashes של מסמכים; הבורר מצביע בפומבי, הפסיקה מתועדת על השרשרת וניתנת לביקורת.
- בורר אקראי ממאגר. פרוטוקול Kleros משתמש בבית משפט מבוזר—בחירה אקראית של מושבעים מ-stakers, עם תמריץ כלכלי להצביע ביושר. אנו משתלבים דרך ממשקי
contract Escrow is IArbitrable { IArbitrator public immutable arbitrator; uint256 public disputeId; enum Status { Pending, Active, Disputed, Resolved } struct Deal { address buyer; address seller; uint256 amount; uint256 timeout; Status status; uint8 buyerPercent; } function raiseDispute(uint256 dealId) external payable { Deal storage deal = deals[dealId]; require(deal.status == Status.Active); require(msg.value >= arbitrator.arbitrationCost("")); deal.status = Status.Disputed; disputeId = arbitrator.createDispute{value: msg.value}( 2, "" ); emit Dispute(arbitrator, disputeId, dealId); } function rule(uint256 _disputeId, uint256 _ruling) external override { require(msg.sender == address(arbitrator)); _executeRuling(_disputeId, _ruling); } }/msg.value.
מבנה חוזה עם תמיכה ב-Kleros:
contract Escrow is IArbitrable {
IArbitrator public immutable arbitrator;
uint256 public disputeId;
enum Status {
Pending,
Active,
Disputed,
Resolved
}
struct Deal {
address buyer;
address seller;
uint256 amount;
uint256 timeout;
Status status;
uint8 buyerPercent;
}
function raiseDispute(uint256 dealId) external payable {
Deal storage deal = deals[dealId];
require(deal.status == Status.Active);
require(msg.value >= arbitrator.arbitrationCost(""));
deal.status = Status.Disputed;
disputeId = arbitrator.createDispute{value: msg.value}(2, "");
emit Dispute(arbitrator, disputeId, dealId);
}
function rule(uint256 _disputeId, uint256 _ruling) external override {
require(msg.sender == address(arbitrator));
_executeRuling(_disputeId, _ruling);
}
} איך לבחור מודל בוררות?
| מודל | מהירות | עמידות לקשירת קשר | עלות |
|---|---|---|---|
| בורר יחיד | <יום אחד | נמוכה | חינם |
| Multisig (3 מתוך 5) | 1-3 ימים | בינונית | גז |
| Kleros (אקראי) | 2-7 ימים | גבוהה | הימור קטן |
טיפ לאופטימיזציית גז
השתמשו בבוררות commit-reveal רק לעסקאות בעלות גבוהה: כל סבב הצבעה עולה גז. לעסקאות מתחת ל-1,000 דולר, multisig מספיק.למה פסק זמן הוא קריטי
ללא פסק זמן, כספים ננעלים לנצח אם צד אחד שותק. פסקי זמן אופייניים: 3 עד 30 ימים. בפסק זמן, המוכר מבקש החזר (אם הקונה לא אישר) או שהקונה מושך (אם המוכר לא סיפק). פסק הזמן מושהה במהלך מחלוקת בוררות.
ERC-20 לעומת ETH מקורי: הבדלים לא מובנים מאליהם
אסקרו עם ETH פשוט יותר—שלחו call, החזירו דרך permit. עם ERC-20, יש צורך באישור (approve) לפני ההפקדה. זה יוצר שתי התקפות:
- Front-running של אישור טוקן. קלאסי: משתמש מאשר (spender, 100), ואז מאשר (spender, 200). באמצע, תוקף מושך 100. פתרון: תמיד לאשר (spender, 0) לפני אישור חדש, או להשתמש ב-
uint256 before = token.balanceOf(address(this)); token.transferFrom(...); uint256 received = token.balanceOf(address(this)) - before;(EIP-2612). - טוקנים עם עמלת העברה (fee-on-transfer). טוקנים דפלציוניים גובים עמלה על העברה. יש לבדוק את הכמות שהתקבלה בפועל:
SafeERC20
לטוקנים עם עמלת העברה, אנו משתמשים ב-function deposit(address token, uint256 amount) external payable { if (token == address(0)) { require(msg.value == amount); } else { require(msg.value == 0); IERC20(token).safeTransferFrom(msg.sender, address(this), amount); } } מ-OpenZeppelin, שמטפל נכון בטוקנים לא סטנדרטיים (לדוגמה, USDT לא מחזיר bool). OpenZeppelin SafeERC20 זמין ב-GitHub.
אסקרו עם טוקנים מרובים
כדי לתמוך גם ב-ETH וגם ב-ERC-20, אחידו את הממשק דרך כתובת האפס עבור ETH:
function deposit(address token, uint256 amount) external payable {
if (token == address(0)) {
require(msg.value == amount);
} else {
require(msg.value == 0);
IERC20(token).safeTransferFrom(msg.sender, address(this), amount);
}
} השוואה עם פלטפורמות מרכזיות
| פרמטר | פלטפורמה מרכזית | חוזה חכם | הגישה ההיברידית שלנו |
|---|---|---|---|
| אמון | אמון מלא בפלטפורמה | אמון בקוד | אמון בקוד מבוקר + בוררות |
| עמלה | 1-3% מהעסקה | ≈0% (גז בלבד) | 0% לבוררות, גז אופטימלי |
| סיכון רגולטורי | גבוה (הקפאת חשבון) | נמוך | נמוך |
| מהירות עסקה | מיידית | 5-10 בלוקים | אופטימלית ל-5 בלוקים |
איך לשלב בוררות Kleros
- פרוסו חוזה Escrow שיורש מ-
IArbitrable. - ציינו את כתובת
arbitratorבקונסטרוקטור. - ב-
raiseDispute, קראו ל-arbitrator.createDisputeעם ראיות. - יישמו את
ruleכדי לעבד את פסיקת הבורר. - הריצו בדיקות fuzzing עם Foundry—כסו מקרי קצה של פסקי זמן ו-fee-on-transfer.
תהליך הפיתוח
- עיצוב (0.5-1 יום). הגדירו: בורר, פסקי זמן, טוקנים, שחרור חלקי.
- פיתוח ובדיקות (2-4 ימים). Foundry עם fuzzing—מקרי גבול לפסקי זמן, fee-on-transfer, רקורסיה. בדיקות reentrancy נפרדות באמצעות
ReentrancyGuard. - ביקורת ופריסה. עבור TVL > 100,000 דולר, ביקורת חיצונית (1-2 שבועות). פריסה עם אימות ב-Etherscan/Polygonscan.
עלות הפיתוח הממוצעת משתנה בהתאם למורכבות; התחילו עם ייעוץ חינם. צרו קשר לדיון מפורט בתרחיש שלכם. הזמינו פיתוח חוזה אסקרו עם ביקורת—קבלו הגנה אמינה לעסקאות שלכם.







