Разработка некастодиального кошелька
Некастодиальный кошелёк — это программа, в которой приватный ключ никогда не покидает устройство пользователя. Никакого промежуточного хранилища, никаких серверов, которые можно взломать или заморозить. Ключи у пользователя — значит, и активы у пользователя.
Архитектурные решения
Выбор архитектуры определяется двумя вопросами: на каком устройстве хранится ключ и как происходит подписание транзакций.
HD-кошелёк (Hierarchical Deterministic) по стандарту BIP-32/BIP-44 — базовая архитектура для большинства современных кошельков. Из одной seed-фразы (BIP-39, 12 или 24 слова) деривируется дерево ключей. Пользователь бэкапит только мнемонику, а кошелёк восстанавливает все аккаунты автоматически.
Дерево деривации для Ethereum: m/44'/60'/0'/0/n, где n — индекс аккаунта. Для Bitcoin разные сети используют разные coin_type: 0 для mainnet, 1 для testnet.
MPC-кошелёк (Multi-Party Computation) — приватный ключ никогда не существует целиком ни у одной стороны. Подписание происходит через протокол threshold signature scheme (TSS), например GG20 или CGGMP21. Это убирает single point of failure, но усложняет реализацию.
Smart contract wallet — EOA (Externally Owned Account) заменяется смарт-контрактом. Стандарт ERC-4337 (Account Abstraction) позволяет реализовать:
- социальное восстановление
- batched транзакции
- gasless операции через Paymaster
- мультиподпись без отдельного multisig-контракта
Безопасное хранение ключей
Это самая критичная часть. Подходы по платформам:
| Платформа | Решение | Уровень безопасности |
|---|---|---|
| iOS | Secure Enclave + Keychain | Высокий |
| Android | StrongBox / TEE + Keystore | Высокий |
| Desktop | OS keychain + AES-256 шифрование файла | Средний |
| Browser Extension | SubtleCrypto API + encrypted storage | Средний |
| Hardware | Secure Element (HSM) | Максимальный |
Seed-фраза шифруется через Argon2id (key derivation) с пользовательским паролем до записи в storage. Ни в коем случае не через MD5/SHA1.
Подключение к блокчейну
Web3 провайдеры: ethers.js 6.x или viem для EVM-совместимых сетей. Для мультичейн — wagmi как абстракция поверх.
RPC-эндпоинты: публичные ноды (Infura, Alchemy, QuickNode) для production. Для приватности — собственная нода или поддержка нескольких провайдеров с fallback.
WalletConnect v2 — стандартный протокол для подключения к dApp. Использует relay-сервер только для передачи зашифрованных сообщений, ключи по нему не передаются.
Подписание транзакций
Пользователь инициирует транзакцию → кошелёк показывает детали → пользователь подтверждает → ключ из Secure Storage подписывает данные → подписанная транзакция отправляется в сеть.
EIP-1559 транзакции используют maxFeePerGas и maxPriorityFeePerGas вместо gasPrice. Кошелёк должен получать актуальные данные из eth_feeHistory и предлагать три уровня скорости.
EIP-712 — структурированные данные для подписания (типизированные сообщения). Позволяет пользователю видеть что именно он подписывает, а не просто хеш.
Transaction simulation
Перед подписанием критически важно симулировать транзакцию. Tenderly, Alchemy Simulation API или локальный forked node позволяют:
- Показать ожидаемые изменения балансов
- Предупредить о подозрительном approve (unlimited approval)
- Обнаружить попытку drain кошелька
Поддержка токенов и NFT
Автоматическое обнаружение ERC-20 через события Transfer + Moralis/Alchemy NFT API. Для кастомных токенов — ручной import по адресу контракта с верификацией через Etherscan API.
Что мы разрабатываем
Полный стек некастодиального кошелька: мобильное приложение (React Native или Flutter) или browser extension, HD-деривация с безопасным хранением seed, интеграция WalletConnect v2, поддержка EVM-сетей (Ethereum, BSC, Polygon, Arbitrum, Optimism), базовый token/NFT discovery, transaction simulation перед подписанием. Архитектура — без каких-либо серверных компонентов, хранящих ключи.







