Розробка гаманця з social recovery та ERC-4337

Ми стикаємося із втраченими seed-фразами щодня: клієнт записав 12 слів на папірці, поклав у ящик стола — і забув. За оцінками <cite>Chainalysis, 20–25% усіх біткоїнів безповоротно втрачені саме так</cite>. Наші інженери розробляють гаманці з social recovery — механізмом, який рятує активи при втраті

Напрямки блокчейн-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Ми стикаємося із втраченими seed-фразами щодня: клієнт записав 12 слів на папірці, поклав у ящик стола — і забув. За оцінками Chainalysis, 20–25% усіх біткоїнів безповоротно втрачені саме так. Наші інженери розробляють гаманці з social recovery — механізмом, який рятує активи при втраті ключа. Замовте таку реалізацію під ключ: ми спроектуємо контракт, налаштуємо guardian-ів, проведемо аудит. В середньому проєкт займає від 4 до 12 тижнів залежно від складності.

Social recovery — це ідея Віталіка Бутеріна, реалізована в Argent та Loopring, а тепер нативно доступна через Account Abstraction (ERC-4337). Гаманець — смарт-контракт з двома режимами: owner key для повсякденних транзакцій та guardian set для відновлення.

Як працює social recovery на рівні контракту

Guardian set та threshold recovery

Guardians — адреси, які колективно можуть змінити owner key. Власник призначає N guardian-ів та поріг threshold (зазвичай 3 з 5). Guardians не чіпають активи — лише викликають initiateRecovery та finalizeRecovery. Це ключова відмінність: скомпрометований guardian не вкраде кошти, а лише запустить зміну ключа.

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 критичний?

recoveryDelay — обов’язковий параметр. Без нього: threshold скомпрометовано → миттєва втрата контролю. З timelock (Argent використовує 24-48 годин, для institutional — 72+ години) у власника є вікно для скасування. На практиці це знижує ризик втрати активів у 3 рази порівняно з миттєвим відновленням.

Guardian management із затримкою

Додавання та видалення guardian-ів теж через timelock — інакше owner може замінити всіх guardian-ів перед продажем. Використовуємо патерн pendingGuardianAdd:

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]; } 

Як обрати guardian-ів?

Вибір guardian-ів — соціально-архітектурна задача. Варіанти:

  • Довірені особи: 3 близьких людини, кожен зберігає ключ guardian у своєму гаманці. Найпростіша схема.
  • Hardware wallet + телефон + guardian сервіс: резервний Ledger + телефон + сервіс (Argent або кастомний). При втраті двох з трьох — recovery.
  • Multisig як guardian: Safe{Wallet} в ролі guardian. Для recovery потрібен quorum у Safe. Підходить корпораціям.
  • Smart contract guardian: timelock контракт організації, recovery через governance голосування.
Тип guardian Зручність Децентралізація Підходить для
Trusted persons (3-of-5) Висока Висока Роздрібні користувачі
Hardware + mobile + service Середня Середня Power users
Corporate multisig Низька Висока Корпоративні
DAO governance Дуже низька Максимальна Protocol-owned

ERC-4337 та social recovery: газ без газу

Account Abstraction (ERC-4337) робить social recovery нативним патерном. Гаманець — вже смарт-контракт, не потрібно конвертувати EOA. UserOperation дозволяє:

  • Gasless recovery: Paymaster оплачує gas за guardian-ів та користувача.
  • Batched approvals: кілька guardian-ів в одному bundled batch.
  • Social login як guardian: key зберігається в passkey/WebAuthn на телефоні.

Реалізація через Kernel (ZeroDev) або Biconomy Smart Account v2: обидва мають plugin-систему, де social recovery — модуль.

ERC-4337 recovery flow

// 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); 

Це змінює UX: guardian-у не потрібен ETH для gas, він просто підписує approval на телефоні.

Захист від атак

Griefing через spam recovery

Будь-який guardian може ініціювати recovery та заблокувати гаманець. Рішення: recovery не блокує транзакції owner-а, або ініціювати можуть лише кілька guardian-ів колективно.

Social engineering

Зловмисник переконує guardian-ів, що користувач втратив ключ. Захист: timelock + нотифікації (email/push/telegram bot) + out-of-band верифікація.

Front-running finalizeRecovery

Атакуючий бачить finalizeRecovery у мемпулі та підміняє адресу. Захист: commit-reveal або private mempool.

Off-chain guardian coordination

Guardian-ам потрібна координація без on-chain газу. Варіанти:

  • Centralized guardian service (Argent) — зручно, але центральна точка.
  • IPFS + signature aggregation — guardian-и публікують підписи в IPFS, aggregator відправляє batchApprove.
  • E2E encrypted messaging — через Signal/Matrix, low-tech, max незалежність.

Наш гібрид: notification сервер сповіщає guardian-ів, вони схвалюють через dApp, aggregator батчить.

Що входить у розробку

Ми надаємо повний комплект: документація архітектури, вихідні коди смарт-контрактів (Solidity), frontend (wagmi+viem), конфігурації для Foundry, інструкцію з деплою, навчальний вебінар для команди та підтримку протягом місяця після запуску. Оцінимо ваш проєкт безкоштовно — напишіть нам.

Процес роботи

  1. Аналітика (3-5 днів). Цільова аудиторія, вибір guardian-ів, чи потрібна AA, gasless, multichain.
  2. Проектування контракту (3-5 днів). Guardian management, timelock параметри, recovery flow, інтеграція з ERC-4337.
  3. Розробка (4-8 тижнів). Core контракт → guardian management → recovery flow → frontend → guardian coordination UI.
  4. Аудит. Обов'язковий: контракт керує коштами. Перевіряємо reentrancy, timelock, griefing vectors.
  5. Тестування. Fork-тести mainnet, симуляція повного recovery flow.
Етап Тривалість (днів) Результат
Аналітика 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, gasless recovery та guardian UI — 8-12 тижнів. Вартість розраховується індивідуально — зв'яжіться з нами для оцінки.

Ми виконали 20+ проєктів у сфері Social Recovery за 5 років роботи. Наші інженери — автори статей з ERC-4337 та учасники розробки open-source рішень.