Разработка кошелька с 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 параметры, рековери флоу, интеграция с 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 решений.