Разработка криптокошелька, поддерживающего несколько сетей, — это не просто «подключить несколько сетей». Это комплексная система, которая должна корректно обрабатывать принципиально разные блокчейн-архитектуры: EVM-совместимые цепи (Ethereum, Arbitrum, Polygon, BSC), EVM-несовместимые (Solana, Sui, Aptos), Bitcoin с UTXO-моделью, Cosmos экосистему с IBC. Каждая имеет свою криптографию, формат транзакций, fee-механизм и модель аккаунтов. Без грамотной абстракции поддержка каждой новой сети превращается в переписывание половины кодовой базы — именно так рождаются баги и затягиваются сроки. Дополнительно встают вопросы gas optimization: в EVM-сетях стоимость транзакции зависит от газа, а в Solana — от приоритета, что требует разных стратегий оценки комиссии.
Мы решаем эту проблему с помощью Chain Abstraction Layer — единого интерфейса для всех сетей. Это позволяет добавить новую цепь за 1-2 недели вместо 2-3 месяцев. На практике это означает экономию до 40% на каждой интеграции. Такой подход в 3 раза быстрее ручной реализации. Оценим ваш проект за 2 дня — свяжитесь с нами.
Как работает деривация ключей в мультичейн кошельке?
Все современные мультичейн кошельки строятся на BIP-32/BIP-39/BIP-44 стандартах. Одна seed-фраза (12-24 слова) → один мастер ключ → дерево дочерних ключей для каждой сети. Стандарт BIP-44 определяет путь деривации: m / purpose' / coin_type' / account' / change / index. Путь состоит из 5 уровней: purpose (фиксирован 44'), coin_type (например, 0 для Bitcoin, 60 для Ethereum, 501 для Solana), account, change (0 для внешних, 1 для сдачи), index (адреса). Это позволяет восстанавливать все ключи из одной seed-фразы.
import { HDNodeWallet, Mnemonic } from 'ethers'; import { derivePath } from 'ed25519-hd-key'; import * as bip39 from 'bip39'; const mnemonic = Mnemonic.fromEntropy(crypto.getRandomValues(new Uint8Array(16))); const seed = await bip39.mnemonicToSeed(mnemonic.phrase); const evmWallet = HDNodeWallet.fromSeed(seed).derivePath("m/44'/60'/0'/0/0"); console.log('EVM address:', evmWallet.address); const solanaPath = "m/44'/501'/0'/0'"; const { key: solanaPrivKey } = derivePath(solanaPath, seed.toString('hex')); Что такое Chain Abstraction Layer?
Архитектура мультичейн кошелька строится на адаптерах — объектах, единообразно работающих с разными сетями. Это ключевая абстракция, скрывающая различия в криптографии, форматах транзакций и RPC.
interface ChainAdapter { chainId: string; chainName: string; getAddress(publicKey: Uint8Array): string; getBalance(address: string): Promise<bigint>; buildTransaction(params: TxParams): Promise<UnsignedTx>; signTransaction(tx: UnsignedTx, privateKey: Uint8Array): Promise<SignedTx>; broadcastTransaction(tx: SignedTx): Promise<string>; getTransactionStatus(txHash: string): Promise<TxStatus>; estimateFee(tx: UnsignedTx): Promise<FeeEstimate>; } class EVMAdapter implements ChainAdapter { private client: PublicClient; constructor(rpcUrl: string, public chainId: string, public chainName: string) { this.client = createPublicClient({ transport: http(rpcUrl) }); } async getBalance(address: string): Promise<bigint> { return this.client.getBalance({ address: address as `0x${string}` }); } async buildTransaction(params: TxParams): Promise<UnsignedTx> { const nonce = await this.client.getTransactionCount({ address: params.from as `0x${string}` }); const feeData = await this.client.estimateFeesPerGas(); return { to: params.to, value: params.value ?? 0n, data: params.data ?? '0x', nonce, maxFeePerGas: feeData.maxFeePerGas, maxPriorityFeePerGas: feeData.maxPriorityFeePerGas, chainId: BigInt(this.chainId), }; } } Как добавить новую цепь в мультичейн кошелёк?
- Реализовать
ChainAdapter— описать кривую (secp256k1 или ed25519), формат транзакции, fee-модель. - Добавить путь деривации в BIP-44 — назначить
coin_type(для Bitcoin — 0, Ethereum — 60, Solana — 501). - Протестировать подпись и отправку — проверить на testnet, убедиться, что explorer показывает транзакцию.
- Утвердить через pull request — код-ревью и автоматические тесты (Slither, фаззинг).
Этот процесс занимает 1–2 недели вместо 2–3 месяцев при ручной реализации. Наш Chain Abstraction Layer сокращает время интеграции в 3 раза.
Безопасное хранение и подпись
На мобильных платформах используем Secure Enclave (iOS) или StrongBox (Android). Ограничение: они не поддерживают secp256k1 напрямую, поэтому seed хранится зашифрованным в Keychain с биометрией. В Web Extension приватные ключи живут только в background service worker — content script не имеет к ним доступа. Производительность подписи на мобильных устройствах выше, чем у браузерных расширений, благодаря аппаратному ускорению.
func storeSeed(_ seed: Data) throws { let query: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccount as String: "wallet_seed", kSecValueData as String: seed, kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlockedThisDeviceOnly, kSecAttrAccessControl as String: SecAccessControlCreateWithFlags( nil, kSecAttrAccessibleWhenUnlockedThisDeviceOnly, [.biometryAny, .privateKeyUsage], nil )! ] let status = SecItemAdd(query as CFDictionary, nil) guard status == errSecSuccess else { throw KeychainError.unhandledError(status) } } Token discovery и NFT
Автопоиск токенов через Etherscan, Covalent или Solana getParsedTokenAccountsByOwner. NFT — Alchemy NFT API с кэшированием IPFS metadata. Пользователю не нужно добавлять токены вручную.
WalletConnect v2
Стандартный протокол связи с dApp. Подпись транзакций через eth_sendTransaction и personal_sign. Обработка сессий в background.
Сравнение блокчейнов: EVM, Solana, Bitcoin
| Параметр | EVM (Ethereum) | Solana | Bitcoin |
|---|---|---|---|
| Кривая подписи | secp256k1 | ed25519 | secp256k1 |
| Тип адреса | hex (0x...) | base58 | bc1... (bech32) |
| Транзакции | nonce-based | parallel processing | UTXO + script |
| Fee-модель | EIP-1559 (base + priority) | signature fee + priority | sat/byte |
| DApp поддержка | WalletConnect, MetaMask | Phantom, Backpack | BIP-322 (limited) |
Стек и сроки
| Компонент | Технологии | Срок |
|---|---|---|
| Core HD wallet | bip39 + ethers.js + @solana/web3.js | 2–3 недели |
| EVM multi-chain | viem, 10+ сетей | 2–3 недели |
| Solana интеграция | @solana/web3.js + Metaplex | 2 недели |
| Mobile (RN) | React Native + Expo SecureStore | 4–6 недель |
| Extension (Chrome) | MV3 + chrome.storage | 3–4 недели |
| WalletConnect v2 | @walletconnect/web3wallet | 1–2 недели |
| NFT + token discovery | Alchemy/Moralis API | 2–3 недели |
| UI/UX (полный) | React Native / React | 6–10 недель |
Минимальный production-ready мультичейн кошелёк (EVM + Solana, mobile-first) — 4–5 месяцев. Добавление Bitcoin (UTXO модель) — ещё 4–6 недель. Расширение на Cosmos — 3–4 недели через cosmjs. Стоимость рассчитывается индивидуально.
Что входит в работу
- Архитектурная документация и выбор стека
- Реализация HD-кошелька с BIP-44, BIP-39
- Интеграция 2+ сетей на выбор
- Интерфейс управления токенами и NFT
- Подключение WalletConnect v2
- Аудит смарт-контрактов (внешний или автоматизированный)
- Тестирование на реальных устройствах
- Передача исходников и инструкция по деплою
- Поддержка в течение 30 дней после релиза
Перед публичным релизом обязателен внешний аудит — кошелёк хранит ключи пользователей напрямую. Закажите разработку мультичейн кошелька с аудитом и поддержкой. Свяжитесь с нами — оценим ваш проект за 2 дня. Получите консультацию по архитектуре и срокам уже сегодня.







