Production-Ready Multi-Network Crypto Wallet Development
Developing a crypto wallet that supports multiple networks is not just "connecting multiple networks". It is a complex system that must correctly handle fundamentally different blockchain architectures: EVM-compatible chains (Ethereum, Arbitrum, Polygon, BSC), EVM-incompatible ones (Solana, Sui, Aptos), Bitcoin with its UTXO model, and the Cosmos ecosystem with IBC. Each has its own cryptography, transaction format, fee mechanism, and account model. Without proper abstraction, supporting each new network becomes a rewrite of half the codebase — that's how bugs are born and deadlines slip. Additionally, questions of gas optimization arise: in EVM networks the transaction cost depends on gas, while in Solana it depends on priority, requiring different fee estimation strategies.
We solve this problem with a Chain Abstraction Layer — a unified interface for all networks. This allows adding a new chain in 1–2 weeks instead of 2–3 months. In practice, this saves up to 40% on each integration, with typical project costs starting from $50,000. This approach is 3 times faster than manual implementation. With our 10+ years of blockchain experience, we guarantee timely delivery and post-launch support. We'll assess your project in 2 days — get in touch with us.
How Key Derivation Works in a Multi-Chain Wallet
All modern multi-chain wallets are built on BIP-32/BIP-39/BIP-44 standards. One seed phrase (12–24 words) → one master key → a tree of child keys for each network. The BIP-44 standard defines the derivation path: m / purpose' / coin_type' / account' / change / index. The path consists of 5 levels: purpose (fixed 44'), coin_type (e.g., 0 for Bitcoin, 60 for Ethereum, 501 for Solana), account, change (0 for external, 1 for change), index (addresses). This allows recovering all keys from a single seed phrase.
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'));
What is the Chain Abstraction Layer?
The architecture of a multi-chain wallet is built on adapters — objects that work uniformly with different networks. This is the key abstraction that hides differences in cryptography, transaction formats, and 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),
};
}
}
How to Add a New Chain to a Multi-Chain Wallet
- Implement
ChainAdapter— describe the curve (secp256k1 or ed25519), transaction format, fee model. - Add the derivation path to BIP-44 — assign
coin_type(for Bitcoin — 0, Ethereum — 60, Solana — 501). - Test signing and sending — verify on testnet, ensure the explorer shows the transaction.
- Approve via pull request — code review and automated tests (Slither, fuzzing).
This process takes 1–2 weeks instead of 2–3 months with manual implementation. Our Chain Abstraction Layer reduces integration time by 3 times.
Secure Storage and Signing
On mobile platforms we use Secure Enclave (iOS) or StrongBox (Android). Limitation: they do not support secp256k1 directly, so the seed is stored encrypted in Keychain with biometrics. In Web Extensions, private keys live only in the background service worker — the content script has no access to them. Signing performance on mobile devices is higher than on browser extensions thanks to hardware acceleration.
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 and NFTs
Auto-discovery of tokens via Etherscan, Covalent, or Solana getParsedTokenAccountsByOwner. NFTs — Alchemy NFT API with IPFS metadata caching. Users don't need to add tokens manually.
WalletConnect v2
Standard protocol for communicating with dApps. Signing transactions via eth_sendTransaction and personal_sign. Session handling in the background.
Blockchain Comparison: EVM, Solana, Bitcoin
| Parameter | EVM (Ethereum) | Solana | Bitcoin |
|---|---|---|---|
| Signing curve | secp256k1 | ed25519 | secp256k1 |
| Address type | hex (0x...) | base58 | bc1... (bech32) |
| Transactions | nonce-based | parallel processing | UTXO + script |
| Fee model | EIP-1559 (base + priority) | signature fee + priority | sat/byte |
| dApp support | WalletConnect, MetaMask | Phantom, Backpack | BIP-322 (limited) |
Stack and Timelines
| Component | Technologies | Time |
|---|---|---|
| Core HD wallet | bip39 + ethers.js + @solana/web3.js | 2–3 weeks |
| EVM multi-chain | viem, 10+ networks | 2–3 weeks |
| Solana integration | @solana/web3.js + Metaplex | 2 weeks |
| Mobile (RN) | React Native + Expo SecureStore | 4–6 weeks |
| Extension (Chrome) | MV3 + chrome.storage | 3–4 weeks |
| WalletConnect v2 | @walletconnect/web3wallet | 1–2 weeks |
| NFT + token discovery | Alchemy/Moralis API | 2–3 weeks |
| UI/UX (full) | React Native / React | 6–10 weeks |
Minimum production-ready multi-chain wallet (EVM + Solana, mobile-first) — 4–5 months. Typical project cost: starting from $50,000. Adding Bitcoin (UTXO model) — another 4–6 weeks and approximately $15,000. Expanding to Cosmos — 3–4 weeks via cosmjs, around $10,000. Final cost is calculated individually based on your requirements.
What's Included in the Work
- Architectural documentation and stack selection
- Implementation of HD wallet with BIP-44, BIP-39
- Integration of 2+ networks of your choice
- Token and NFT management interface
- WalletConnect v2 integration
- Smart contract audit (external or automated)
- Testing on real devices
- Source code delivery and deployment instructions
- Support for 30 days after release
- 12-month warranty on all core wallet components
Before public release, an external audit is mandatory — the wallet stores users' keys directly. Our team has 10+ years of experience in blockchain security and has delivered 50+ wallet projects. Order the development of a multi-chain wallet with audit and support. Contact us — we'll assess your project in 2 days. Get a consultation on architecture and timelines today.







