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







