rustywallet-address
Comprehensive cryptocurrency address generation and validation library for Bitcoin and Ethereum networks.
Features
- Bitcoin Legacy (P2PKH) - Pay-to-Public-Key-Hash addresses (
1...mainnet,m/ntestnet) - Bitcoin SegWit (P2WPKH) - Pay-to-Witness-Public-Key-Hash addresses (
bc1q...mainnet,tb1q...testnet) - Bitcoin Taproot (P2TR) - Pay-to-Taproot addresses (
bc1p...mainnet,tb1p...testnet) - Ethereum - Ethereum addresses with EIP-55 checksum validation (
0x...) - Multi-network support - Bitcoin mainnet, testnet, regtest, signet
- Address validation - Comprehensive validation with detailed error reporting
- Type-safe API - Rust's type system prevents address format errors
- Zero-copy parsing - Efficient address parsing and validation
- Serde support - Serialization and deserialization support
Installation
Add this to your Cargo.toml:
[]
= "0.1"
= "0.1"
Quick Start
use PrivateKey;
use *;
// Generate a random private key
let private_key = random;
let public_key = private_key.public_key;
// Bitcoin Legacy (P2PKH)
let p2pkh = from_public_key?;
println!; // 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
// Bitcoin SegWit (P2WPKH)
let p2wpkh = from_public_key?;
println!; // bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
// Bitcoin Taproot (P2TR)
let p2tr = from_public_key?;
println!; // bc1p5d7rjq7g6rdk2yhzks9smlaqtedr4dekq08ge8ztwac72sfr9rusxg3297
// Ethereum
let eth = from_public_key?;
println!; // 0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed
Address Types
P2PKH (Pay-to-Public-Key-Hash)
Legacy Bitcoin addresses using Base58Check encoding:
use *;
// From public key
let address = from_public_key?;
// From string
let address = from_str?;
// Validate
validate?;
P2WPKH (Pay-to-Witness-Public-Key-Hash)
SegWit v0 addresses using Bech32 encoding:
use *;
// From public key
let address = from_public_key?;
// From string
let address = from_str?;
// Validate
validate?;
P2TR (Pay-to-Taproot)
Taproot addresses using Bech32m encoding:
use *;
// From public key
let address = from_public_key?;
// From string
let address = from_str?;
// Validate
validate?;
Ethereum
Ethereum addresses with EIP-55 checksum support:
use *;
// From public key
let address = from_public_key?;
// From string
let address = from_str?;
// Validate with checksum
validate_checksum?;
// Convert to checksummed format
let checksummed = address.to_checksum;
Validation Examples
use *;
// Generic address validation with auto-detection
let result = validate;
assert!;
// Specific type validation
assert!;
assert!;
assert!;
assert!;
// Network-specific validation
let mainnet_addr = "1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2";
let testnet_addr = "mipcBbFg9gMiCh81Kj8tqqdgoZub1ZJRfn";
assert!;
assert!;
// Invalid addresses return detailed errors
match validate
Network Support
| Network | P2PKH Prefix | P2WPKH Prefix | P2TR Prefix | Description |
|---|---|---|---|---|
| Bitcoin Mainnet | 1 |
bc1q |
bc1p |
Production Bitcoin network |
| Bitcoin Testnet | m, n |
tb1q |
tb1p |
Bitcoin test network |
| Bitcoin Regtest | m, n |
bcrt1q |
bcrt1p |
Local regression test network |
| Bitcoin Signet | m, n |
tb1q |
tb1p |
Bitcoin signet test network |
| Ethereum | N/A | N/A | N/A | All Ethereum networks use 0x |
API Reference
Core Types
Address- Generic address enum supporting all typesP2PKHAddress- Bitcoin Legacy addressesP2WPKHAddress- Bitcoin SegWit v0 addressesP2TRAddress- Bitcoin Taproot addressesEthereumAddress- Ethereum addressesNetwork- Supported network typesAddressError- Comprehensive error types
Key Methods
// Address creation
from_str // Validation
validate // Type checking
address.is_bitcoin .is_ethereum .address_type .network // Conversion
address.to_string .as_bytes
Error Handling
use AddressError;
match validate ;
License
Licensed under the MIT License. See LICENSE for details.