Wallets
This guide covers two perspectives: connecting your dApp to the Armchain Wallet, and building custom wallet support for Armchain.
Armchain Wallet
The Armchain Wallet is the official browser extension wallet for the Armchain network. It is a fork of Wigwam wallet, customized for ML-DSA44 post-quantum cryptography.
Key Features
ML-DSA44 key management: Generates and stores post-quantum keys
HD wallet derivation: BIP-39 mnemonic with Armchain coin type (
65536)Hardened derivation only: All child keys use hardened paths for security
Type 3 transactions: Signs PQC transactions natively
EIP-1559 gas pricing: Dynamic fee support
Multi-account support: Derive multiple accounts from a single seed phrase
ARM token support: Native token balance display and transfers
Network Configuration
The wallet ships with built-in Armchain network configurations:
// Devnet
{
chainId: 55,
name: "Armchain Devnet",
rpcUrls: ["https://www.armchain.org/devnet"],
nativeCurrency: { symbol: "ARM", name: "Armchain", decimals: 18 },
}
// Local Development
{
chainId: 55,
name: "Armchain Local",
rpcUrls: ["http://localhost:4000"],
nativeCurrency: { symbol: "ARM", name: "Armchain", decimals: 18 },
}For dApp Developers
Connecting to the Wallet
The Armchain Wallet injects a provider into the browser, similar to MetaMask:
Using with Armchain Ethers SDK
Handling Chain Switching
Listening for Events
Signing Messages
EIP-712 Typed Data Signing
For Wallet Developers
If you're building a wallet that supports Armchain, here are the key requirements. The recommended approach is to use the @armchain-ethersv6/ethers SDK, which handles all cryptographic operations internally.
Key Generation
Armchain uses ML-DSA44 (NIST FIPS 204) for all key operations. Key pairs are generated from a 32-byte random seed.
Private Key
2,560 bytes
Public Key
1,312 bytes
The SDK's Wallet.createRandom() and HDNodeWallet.fromPhrase() handle key generation automatically. If implementing from scratch, use a FIPS 204-compliant ML-DSA44 library.
HD Wallet Derivation
Armchain uses a BIP-44 compatible derivation path with all hardened indices:
Critical: Non-hardened derivation is NOT supported with ML-DSA44. All path components must use hardened derivation.
Since ML-DSA44 key generation takes a 32-byte seed (unlike ECDSA's scalar), the HD derivation chain produces child seeds rather than child keys directly. See the @armchain-ethersv6/ethers SDK source for the reference implementation.
Transaction Signing
All Armchain transactions must be Type 3 (PQC). The SDK handles transaction construction and signing:
For custom implementations, the signing process involves computing a transaction hash and producing an ML-DSA44 signature blob that includes both the raw signature and the public key (since ML-DSA44 does not support public key recovery). Refer to the Transaction Types page for the wire format specification.
Address Computation
Armchain addresses are derived from ML-DSA44 public keys using keccak256, producing standard 20-byte Ethereum-format addresses. The SDK handles this automatically via SigningKey.computeAddress().
Key Storage Considerations
ML-DSA44 private keys are 2,560 bytes (vs 32 bytes for ECDSA). This affects:
Private key storage
32 bytes
2,560 bytes
~80× more storage
Key encryption time
Fast
Slightly slower
Negligible
Key backup size
Small
Larger
QR codes may not work for raw keys
Mnemonic backup
12/24 words
12/24 words
Same: mnemonic derives the key
Recommendation: Always support mnemonic-based backup. The 12/24 word seed phrase is the same size regardless of the underlying key type.
Common Integration Patterns
Connect Wallet Button
Transaction Helper
Further Reading
Armchain Ethers SDK for the full SDK reference
PQC Overview to understand post-quantum cryptography
Transaction Types for the Type 3 transaction format
Network Configuration for RPC endpoints and chain details
Last updated