פיתוח ארנק עם שחזור חברתי ו-ERC-4337

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

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

שאלות נפוצות

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

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

אנו מתמודדים מדי יום עם ביטויי גיבוי שאבדו: לקוח רשם 12 מילים על פיסת נייר, הניח אותה במגירת שולחן ושכח. לפי Chainalysis, 20–25% מכלל הביטקוינים אובדים באופן בלתי הפיך בדרך זו. המהנדסים שלנו מפתחים ארנקים עם שחזור חברתי—מנגנון שמציל נכסים כאשר מפתח אובד. הזמינו הטמעה כזו במפתח מוכן: אנו מתכננים את החוזה, מגדירים אפוטרופוסים ומבצעים ביקורת. בממוצע, פרויקט אורך בין 4 ל-12 שבועות בהתאם למורכבות.

שחזור חברתי הוא רעיון של ויטליק בוטרין, שמיושם ב-Argent וב-Loopring, וזמין כעת באופן טבעי דרך Account Abstraction (ERC-4337). הארנק הוא חוזה חכם עם שני מצבים: מפתח בעלים לעסקאות יומיומיות וקבוצת אפוטרופוסים לשחזור.

כיצד פועל שחזור חברתי ברמת החוזה

קבוצת אפוטרופוסים ושחזור סף

אפוטרופוסים הם כתובות שיכולות לשנות במשותף את מפתח הבעלים. הבעלים ממנה N אפוטרופוסים וסף (בדרך כלל 3 מתוך 5). אפוטרופוסים אינם נוגעים בנכסים—הם רק קוראים ל-initiateRecovery ול-finalizeRecovery. זהו הבדל מרכזי: אפוטרופוס שנפרץ אינו יכול לגנוב כספים, אלא רק ליזום שינוי מפתח.

contract SocialRecoveryWallet {
    address public owner;
    mapping(address => bool) public isGuardian;
    uint256 public guardianCount;
    uint256 public threshold;
    uint256 public recoveryDelay; // timelock в секундах

    struct RecoveryRequest {
        address proposedOwner;
        uint256 approvalCount;
        uint256 initiatedAt;
        mapping(address => bool) approvals;
    }

    RecoveryRequest public pendingRecovery;

    function initiateRecovery(address _proposedOwner) external onlyGuardian {
        require(pendingRecovery.initiatedAt == 0, "Recovery already pending");
        pendingRecovery.proposedOwner = _proposedOwner;
        pendingRecovery.initiatedAt = block.timestamp;
        pendingRecovery.approvalCount = 1;
        pendingRecovery.approvals[msg.sender] = true;
    }

    function approveRecovery() external onlyGuardian {
        require(pendingRecovery.initiatedAt != 0, "No pending recovery");
        require(!pendingRecovery.approvals[msg.sender], "Already approved");
        pendingRecovery.approvals[msg.sender] = true;
        pendingRecovery.approvalCount++;
    }

    function finalizeRecovery() external {
        require(pendingRecovery.approvalCount >= threshold, "Insufficient approvals");
        require(
            block.timestamp >= pendingRecovery.initiatedAt + recoveryDelay,
            "Timelock not expired"
        );
        owner = pendingRecovery.proposedOwner;
        delete pendingRecovery;
    }
}

מדוע timelock הוא קריטי

contract SocialRecoveryWallet { address public owner; mapping(address => bool) public isGuardian; uint256 public guardianCount; uint256 public threshold; uint256 public recoveryDelay; // timelock в секундах struct RecoveryRequest { address proposedOwner; uint256 approvalCount; uint256 initiatedAt; mapping(address => bool) approvals; } RecoveryRequest public pendingRecovery; function initiateRecovery(address _proposedOwner) external onlyGuardian { require(pendingRecovery.initiatedAt == 0, "Recovery already pending"); pendingRecovery.proposedOwner = _proposedOwner; pendingRecovery.initiatedAt = block.timestamp; pendingRecovery.approvalCount = 1; pendingRecovery.approvals[msg.sender] = true; } function approveRecovery() external onlyGuardian { require(pendingRecovery.initiatedAt != 0, "No pending recovery"); require(!pendingRecovery.approvals[msg.sender], "Already approved"); pendingRecovery.approvals[msg.sender] = true; pendingRecovery.approvalCount++; } function finalizeRecovery() external { require(pendingRecovery.approvalCount >= threshold, "Insufficient approvals"); require( block.timestamp >= pendingRecovery.initiatedAt + recoveryDelay, "Timelock not expired" ); owner = pendingRecovery.proposedOwner; delete pendingRecovery; } } הוא פרמטר חובה. בלעדיו: סף שנפרץ → אובדן שליטה מיידי. עם timelock (Argent משתמשת ב-24–48 שעות, למוסדיים 72+ שעות) לבעלים יש חלון לביטול. בפועל, זה מפחית את הסיכון לאובדן נכסים פי 3 בהשוואה לשחזור מיידי.

ניהול אפוטרופוסים עם עיכוב

הוספה והסרה של אפוטרופוסים משתמשות גם ב-timelock—אחרת הבעלים יכול להחליף את כל האפוטרופוסים לפני מכירה. אנו משתמשים בתבנית recoveryDelay:

mapping(address => uint256) public pendingGuardianAdditions;
uint256 public guardianAddDelay;

function scheduleAddGuardian(address _guardian) external onlyOwner {
    pendingGuardianAdditions[_guardian] = block.timestamp + guardianAddDelay;
}

function confirmAddGuardian(address _guardian) external {
    require(pendingGuardianAdditions[_guardian] != 0, "Not scheduled");
    require(block.timestamp >= pendingGuardianAdditions[_guardian], "Timelock active");
    isGuardian[_guardian] = true;
    guardianCount++;
    delete pendingGuardianAdditions[_guardian];
}

כיצד לבחור אפוטרופוסים?

בחירת אפוטרופוסים היא משימה חברתית-ארכיטקטונית. אפשרויות:

  • אנשים מהימנים: 3 אנשים קרובים, כל אחד מחזיק מפתח אפוטרופוס בארנק שלו. התוכנית הפשוטה ביותר.
  • ארנק חומרה + טלפון + שירות אפוטרופוס: Ledger גיבוי + טלפון + שירות (Argent או מותאם אישית). אם שניים מתוך שלושה אובדים, שחזור.
  • Multisig כאפוטרופוס: Safe{Wallet} כאפוטרופוס. שחזור דורש קוורום ב-Safe. מתאים לתאגידים.
  • חוזה חכם כאפוטרופוס: חוזה timelock של הארגון, שחזור באמצעות הצבעת ממשל.
סוג אפוטרופוס נוחות ביזור מתאים ל
אנשים מהימנים (3 מתוך 5) גבוהה גבוה משתמשים קמעונאיים
חומרה + נייד + שירות בינונית בינוני משתמשים מתקדמים
Multisig תאגידי נמוכה גבוה תאגידים
ממשל DAO נמוכה מאוד מקסימלי בבעלות פרוטוקול

ERC-4337 ושחזור חברתי: שחזור ללא גז

Account Abstraction (ERC-4337) הופך שחזור חברתי לתבנית טבעית. הארנק הוא כבר חוזה חכם, אין צורך להמיר EOA. UserOperation מאפשר:

  • שחזור ללא גז: Paymaster מכסה גז עבור אפוטרופוסים והמשתמש.
  • אישורים מצטברים: מספר אפוטרופוסים באצווה אחת.
  • התחברות חברתית כאפוטרופוס: מפתח מאוחסן ב-passkey/WebAuthn בטלפון.

יישום דרך Kernel (ZeroDev) או Biconomy Smart Account v2: לשניהם מערכת תוספים שבה שחזור חברתי הוא מודול.

זרימת שחזור ERC-4337

// Guardian подписывает UserOperation для approveRecovery
const userOp = await guardianSmartAccount.buildUserOperation({
  target: walletAddress,
  data: wallet.interface.encodeFunctionData('approveRecovery', [])
});
// Paymaster спонсирует gas
const sponsoredOp = await paymasterClient.sponsorUserOperation(userOp);
await bundlerClient.sendUserOperation(sponsoredOp);

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

הגנה מפני התקפות

Griefing באמצעות שחזור ספאם

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

הנדסה חברתית

תוקף משכנע אפוטרופוסים שהמשתמש איבד את המפתח. הגנה: timelock + התראות (אימייל/פוש/בוט טלגרם) + אימות מחוץ לרשת.

Front-running של finalizeRecovery

תוקף רואה את pendingGuardianAdd ב-mempool ומחליף את הכתובת. הגנה: commit-reveal או mempool פרטי.

תיאום אפוטרופוסים מחוץ לרשת

אפוטרופוסים זקוקים לתיאום ללא גז על הרשת. אפשרויות:

  • שירות אפוטרופוס מרכזי (Argent) – נוח אך נקודת כשל מרכזית.
  • IPFS + צבירת חתימות – אפוטרופוסים מפרסמים חתימות ב-IPFS, מצרף שולח batchApprove.
  • הודעות מוצפנות E2E – דרך Signal/Matrix, טכנולוגיה נמוכה, עצמאות מקסימלית.

ההיברידית שלנו: שרת התראות מודיע לאפוטרופוסים, הם מאשרים דרך dApp, ומצרף יוצר אצווה.

מה כלול בפיתוח

אנו מספקים חבילה מלאה: תיעוד ארכיטקטורה, קוד מקור של חוזה חכם (Solidity), frontend (wagmi+viem), תצורות Foundry, הוראות פריסה, סמינר מקוון להכשרת הצוות וחודש תמיכה לאחר ההשקה. אנו נעריך את הפרויקט שלכם בחינם—צרו קשר.

תהליך העבודה

  1. ניתוח (3-5 ימים). קהל יעד, בחירת אפוטרופוסים, צורך ב-AA, ללא גז, multichain.
  2. עיצוב חוזה (3-5 ימים). ניהול אפוטרופוסים, פרמטרי timelock, זרימת שחזור, אינטגרציית ERC-4337.
  3. פיתוח (4-8 שבועות). חוזה ליבה → ניהול אפוטרופוסים → זרימת שחזור → frontend → ממשק תיאום אפוטרופוסים.
  4. ביקורת. חובה: החוזה מנהל כספים. אנו בודקים reentrancy, timelock, וקטורי griefing.
  5. בדיקות. בדיקות fork על mainnet, סימולציה מלאה של זרימת שחזור.
שלב משך (ימים) תוצאה
ניתוח 3-5 מפרט טכני
עיצוב 3-5 ארכיטקטורת חוזה
פיתוח 28-56 קוד מקור, frontend
ביקורת 7-14 דוח ביקורת
בדיקות 5-7 בדיקות fork

טכנולוגיות וכלים

Solidity 0.8.x + OpenZeppelin, Foundry, ERC-4337 SDK, wagmi + viem, WalletConnect v2. אנו משתמשים ב-Tenderly לניטור.

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

ארנק בסיסי ללא AA: 3-5 שבועות. עם ERC-4337, שחזור ללא גז וממשק אפוטרופוסים: 8-12 שבועות. העלות מחושבת באופן אישי—צרו קשר להערכה.

השלמנו 20+ פרויקטים בתחום השחזור החברתי במשך 5 שנות עבודה. המהנדסים שלנו הם מחברי מאמרים על ERC-4337 ותורמים לפתרונות קוד פתוח.