A comprehensive TypeScript library for validating blockchain wallet addresses across multiple networks.
- π Lightweight: < 10KB minified + gzipped
- π Type-safe: Written in TypeScript with full type definitions
- β‘ Fast: No heavy dependencies
- π§ͺ Well-tested: Production-ready test coverage
- π Multi-network support:
- Algorand
- Bitcoin (Legacy, SegWit, Native SegWit)
- Bitcoin Cash
- Cardano
- Core (ICAN)
- Cosmos ecosystem (Cosmos, Osmosis, Juno, etc.)
- NS domains on ENS standard (including subdomains and emoji support)
- EVM-compatible chains (Ethereum, Polygon, BSC, etc.)
- Litecoin (Legacy, SegWit, Native SegWit)
- Polkadot
- Ripple (XRP)
- Solana
- Stellar
- π¦ Modern package:
- ESM and CommonJS support
- Tree-shakeable
- Zero configuration
- Works in Node.js and browsers
# Using pnpm (recommended)
pnpm add blockchain-wallet-validator
# Using npm
npm install blockchain-wallet-validator
# Using yarn
yarn add blockchain-wallet-validator
import { validateWalletAddress } from 'blockchain-wallet-validator';
// Validate an Ethereum address with specific networks enabled
const evmResult = validateWalletAddress(
'0x4838B106FCe9647Bdf1E7877BF73cE8B0BAD5f97',
{ network: ['evm', 'eth'] },
);
console.log(evmResult);
// {
// network: 'evm',
// isValid: true,
// description: 'Ethereum Virtual Machine compatible address (Ethereum, Polygon, BSC, etc.)',
// metadata: {
// isChecksumValid: true,
// format: 'hex'
// }
// }
// Validate a Name Service domain
const nsResult = validateWalletAddress('vitalik.eth', {
nsDomains: ['eth'],
network: ['ns'],
});
console.log(nsResult);
// {
// network: 'ns',
// isValid: true,
// description: 'Ethereum Name Service domain',
// metadata: {
// format: 'ens',
// isSubdomain: false,
// isEmoji: false
// }
// }
// Validate with multiple options
const result = validateWalletAddress(
'tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx',
{
network: ['btc'],
testnet: true,
enabledLegacy: false,
},
);
console.log(result);
// {
// network: 'bitcoin',
// isValid: true,
// description: 'Bitcoin Native SegWit address',
// metadata: {
// format: 'Native SegWit',
// isTestnet: true
// }
// }
Validates a blockchain wallet address and returns information about the network it belongs to.
address
(string): The wallet address to validateoptions
(optional): Validation optionsnetwork
(string[] | null): Networks to validate against. Default: null (validates all networks). Example:['btc', 'eth']
testnet
(boolean): Whether to validate testnet addresses. Default: falseenabledLegacy
(boolean): Whether to validate legacy address formats. Default: trueemojiAllowed
(boolean): Whether to allow emoji characters in NS domains. Default: truensDomains
(string[]): List of Name Service domains to validate against. Default:[]
Returns a NetworkInfo
object containing:
network
(string): The identified blockchain networkisValid
(boolean): Whether the address is validdescription
(string): Human-readable description of the address typemetadata
(object): Additional information about the address- Properties vary by network type
- May include format, checksum validation, testnet status, etc.
Network | Address Format | Example |
---|---|---|
Algorand | Base32 | VCMJKWOY5P5P7SKMZFFOCEROPJCZOTIJMNIYNUCKH7LRO45JMJP6UYBIJA |
Bitcoin Cash | CashAddr | bitcoincash:qr7fzmep8g7h7ymfxy74lgc0v950j3r4ecr4wd9r3z |
Bitcoin Legacy | Base58 (1...) | 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2 |
Bitcoin Native SegWit | Bech32 (bc1...) | bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq |
Bitcoin SegWit | Base58 (3...) | 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy |
Cardano | Bech32 | addr1... |
Core | ICAN | cb7147879011ea207df5b35a24ca6f0859dcfb145999 |
Cosmos | Bech32 | cosmos1yw6g44c4pqd2rxgrcqekxg9k8f4fd8xpx2k8c3 |
ENS | name.ns | vitalik.eth |
EVM | Hex (0x...) | 0x4838B106FCe9647Bdf1E7877BF73cE8B0BAD5f97 |
Litecoin Legacy | Base58 (L...) | LaMT348PWRnrqeeWArpwQPbuanpXDZGEUz |
Litecoin Native SegWit | Bech32 (ltc1...) | ltc1qgpn2phk8c7k966xjkz0p5zkf5w7rzeslwj42h |
Litecoin SegWit | Base58 (M...) | MJRSgZ3UUFcTBTBAaN38XAXvHAaZe6TMbM |
Polkadot | SS58 | 1FRMM8PEiWXYax7rpS6X4XZX1aAAxSWx1CrKTyrVYhV24fg |
Ripple | Base58 | rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh |
Solana | Base58 | DRpbCBMxVnDK7maPM5tGv6MvB3v1sRMC86PZ8okm21hy |
Stellar | Base32 | GBQMXVTR5HQNRGXPR4ZPBOZR7VQXOQMEQMZWIVLIW2MYBXC2HQWZZ4VJ |
- Bundle size: < 10KB minified + gzipped
- No runtime dependencies except:
bs58check
: For Bitcoin address validationethereum-cryptography
: For EVM checksum validation
- No Buffer dependency (works in modern browsers without polyfills)
- Tree-shakeable: Only imports what you use
- Zero configuration required
- All modern browsers (Chrome, Firefox, Safari, Edge)
- IE11 not supported
# Install dependencies
pnpm install
# Run tests
pnpm test
# Run tests with coverage
pnpm test:coverage
# Build the package
pnpm build
# Check bundle size
pnpm size
# Analyze bundle
pnpm analyze
# Format code
pnpm format
# Lint code
pnpm lint
Licensed under the CORE License.
Contributions are welcome! Please feel free to submit a Pull Request.
- π Browser: Works directly in all modern browsers, no Node.js required
- π¦ Node.js: Optional - v18+ recommended if using in Node environment
- π₯ Package Manager: If using Node.js, recommended:
- pnpm (v8.10.0+)
- npm or yarn are also supported
This package helps validate the format of blockchain addresses but does not guarantee the security or ownership of the addresses. Always verify addresses through multiple sources before sending any transactions.
See CHANGELOG.md for release history.
Created and maintained by Sergiy Dybskiy.