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.

Component
Size

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:

Aspect
ECDSA
ML-DSA44
Impact

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

Last updated