Addresses¶
Overview¶
Kaspa addresses are encoded representations of public keys or script hashes. They include:
- A network prefix (
kaspa:,kaspatest:,kaspadev:,kaspasim:) - A version indicating the address type (PubKey, PubKeyECDSA, ScriptHash)
- An encoded payload derived from the public key or script
Creating Addresses¶
From a String¶
from kaspa import Address
# Parse an address string
address = Address("kaspa:qz0s9f5p7d3e2c4x8n1b6m9k0j2h4g5f3d7a8s9w0e1r2t3y4u5i6o7p8")
# Get address components
print(f"Prefix: {address.prefix}")
print(f"Version: {address.version}")
print(f"Full: {address.to_string()}")
From a Private Key¶
from kaspa import PrivateKey, NetworkType
# Create from private key hex
private_key = PrivateKey("your-private-key-hex")
# Derive Schnorr address (default)
address = private_key.to_address(NetworkType.Mainnet)
print(f"Schnorr address: {address.to_string()}")
# Derive ECDSA address
ecdsa_address = private_key.to_address_ecdsa(NetworkType.Mainnet)
print(f"ECDSA address: {ecdsa_address.to_string()}")
From a Public Key¶
from kaspa import PublicKey, NetworkType
# Create from public key hex
public_key = PublicKey("02a1b2c3d4e5f6...")
# Derive address
address = public_key.to_address(NetworkType.Mainnet)
print(f"Address: {address.to_string()}")
Validating Addresses¶
from kaspa import Address
address_str = "kaspa:qz..."
# Static validation (returns bool)
if Address.validate(address_str):
address = Address(address_str)
print(f"Valid address: {address.to_string()}")
else:
print("Invalid address!")
Address Types¶
Kaspa supports several address versions:
| Version | Description |
|---|---|
| PubKey | Schnorr signature |
| PubKeyECDSA | ECDSA signature |
| ScriptHash | Pay-to-Script-Hash |
from kaspa import Address
address = Address("kaspa:qz...")
# Check the version
version = address.version
print(f"Address version: {version}")
Network Prefixes¶
Addresses include a prefix indicating the network:
| Prefix | Network | Use |
|---|---|---|
kaspa: |
Mainnet | Production |
kaspatest: |
Testnet | Testing |
kaspadev: |
Devnet | Development |
kaspasim: |
Simnet | Simulation |
Changing the Prefix¶
from kaspa import Address
# Create mainnet address
address = Address("kaspa:qz...")
# Change to testnet
address.prefix = "kaspatest"
print(f"Testnet address: {address.to_string()}")
Address from Script¶
Create an address from a script public key:
from kaspa import ScriptPublicKey, address_from_script_public_key, NetworkType
# Create script public key
script_pubkey = ScriptPublicKey(0, "20a1b2c3...")
# Convert to address
address = address_from_script_public_key(script_pubkey, NetworkType.Mainnet)
print(f"Address: {address.to_string()}")
Script from Address¶
Get the script public key for an address:
from kaspa import Address, pay_to_address_script
address = Address("kaspa:qz...")
# Get the locking script
script_pubkey = pay_to_address_script(address)
print(f"Script: {script_pubkey.script}")
Multi-Signature Addresses¶
Create a multi-signature address:
from kaspa import create_multisig_address, PublicKey, NetworkType
# Gather public keys from all participants
pubkeys = [
PublicKey("02key1..."),
PublicKey("02key2..."),
PublicKey("02key3..."),
]
# Create 2-of-3 multisig address
multisig_address = create_multisig_address(
minimum_signatures=2,
keys=pubkeys,
network_type=NetworkType.Mainnet
)
print(f"Multisig address: {multisig_address.to_string()}")