Overview
INTcoin uses unique address formats distinct from Bitcoin and other cryptocurrencies. All addresses are quantum-resistant using CRYSTALS-Dilithium5 public keys and SHA3-256 hashing.
⚠️ Important: INTcoin ≠ Bitcoin
INTcoin addresses are NOT compatible with Bitcoin or any other cryptocurrency. Sending funds to the wrong address type will result in permanent loss of funds. Always verify you are using an INTcoin address (starts with INT1, INT3, or lnint).
On-Chain Address Formats
1. Pay to Public Key Hash (P2PKH)
Mainnet: INT1A2b3C4d5E6f7G8h9I0jK1L2M3N4o5P6q7R8s
Testnet: TINTA2b3C4d5E6f7G8h9I0jK1L2M3N4o5P6q7R8s
Standard address type for receiving payments. Starts with INT1 on mainnet.
Address Generation Process:
- Generate Dilithium5 keypair (public key: 2,592 bytes)
- Hash public key with SHA3-256 → 32 bytes
- Take first 20 bytes (RIPEMD-160 equivalent)
- Add version byte:
- Mainnet P2PKH:
0x4E (ASCII 'N' for iNt)
- Testnet P2PKH:
0x6F
- Compute double SHA3-256 checksum (first 4 bytes)
- Encode with Base58Check → Final address
# Example P2PKH address generation (pseudocode)
dilithium_pubkey = generate_dilithium5_keypair().public_key # 2,592 bytes
pubkey_hash = sha3_256(dilithium_pubkey)[:20] # First 20 bytes
version_byte = 0x4E # Mainnet
payload = version_byte + pubkey_hash
checksum = sha3_256(sha3_256(payload))[:4]
address = base58_encode(payload + checksum)
# Result: INT1A2b3C4d5E6f7G8h9I0jK1L2M3N4o5P6q7R8s
2. Pay to Script Hash (P2SH)
Mainnet: INT3X4y5Z6a7B8c9D0e1F2g3H4i5J6k7L8m9N0o
Testnet: TINT3X4y5Z6a7B8c9D0e1F2g3H4i5J6k7L8m9N0o
Used for multi-signature wallets and smart contracts. Starts with INT3 on mainnet.
P2SH Generation:
- Create redeem script (e.g., 2-of-3 multisig)
- Hash script with SHA3-256 → 32 bytes
- Take first 20 bytes
- Add version byte:
- Mainnet P2SH:
0x05
- Testnet P2SH:
0xC4
- Compute checksum and encode with Base58Check
Version Byte Summary
| Address Type |
Network |
Version Byte |
Prefix |
Example |
| P2PKH |
Mainnet |
0x4E |
INT1... |
INT1A2b3C4d5E6f7G8h9I0jK1L... |
| P2PKH |
Testnet |
0x6F |
TINT... |
TINTA2b3C4d5E6f7G8h9I0jK1L... |
| P2SH |
Mainnet |
0x05 |
INT3... |
INT3X4y5Z6a7B8c9D0e1F2g3H4... |
| P2SH |
Testnet |
0xC4 |
TINT3... |
TINT3X4y5Z6a7B8c9D0e1F2g3H... |
Lightning Network Address Formats
Lightning Invoices (BOLT #11)
Mainnet: lnint1000m1p<payment_hash><description><signature>
Testnet: lntint1000m1p<payment_hash><description><signature>
Lightning Network invoices use Bech32 encoding with INTcoin-specific prefixes:
lnint - Mainnet Lightning invoices
lntint - Testnet Lightning invoices
Invoice Structure:
lnint - Human-readable prefix (mainnet)
1000m - Amount: 1000 milli-INT (= 1 INT)
1 - Separator
p... - Payment hash (32 bytes, 52 chars in Bech32)
d... - Description tag
x... - Expiry (default: 3600 seconds)
c... - Min final CLTV expiry
s... - Payment secret (32 bytes)
9... - Feature bits
r... - Route hints (optional)
<signature> - Dilithium5 signature (4,595 bytes)
Amount Multipliers:
| Multiplier |
Name |
Value |
Example |
| m |
milli |
0.001 INT |
lnint250m = 0.25 INT |
| u |
micro |
0.000001 INT |
lnint500u = 0.0005 INT |
| n |
nano |
0.000000001 INT |
lnint100n = 0.0000001 INT |
| p |
pico |
0.000000000001 INT |
lnint50p = 0.00000005 INT |
Channel Point Format
Format: <funding_transaction_hash>:<output_index>
Example: a1b2c3d4e5f6...789:0
Lightning channels are identified by the funding transaction hash and output index. Used in channel management commands.
Payment URI Scheme
intcoin:INT1A2b3C4d5E6f7G8h9I0jK1L2M3N4o5P6q7R8s?amount=10.5&label=Coffee&message=Payment%20for%20coffee
URI Components:
intcoin: - URI scheme identifier
INT1... - Recipient address
?amount=10.5 - Payment amount in INT (optional)
&label=Coffee - Payment label (optional)
&message=... - Payment message (optional, URL-encoded)
💡 QR Code Support
Payment URIs are ideal for QR codes. The INTcoin wallet can scan QR codes containing payment URIs to automatically fill in payment details.
Comparison with Other Cryptocurrencies
| Cryptocurrency |
Address Prefix |
Encoding |
Signature Scheme |
| INTcoin |
INT1, INT3, lnint |
Base58Check, Bech32 |
Dilithium5 (Quantum-Resistant) |
| Bitcoin |
1, 3, bc1 |
Base58Check, Bech32 |
ECDSA secp256k1 |
| Ethereum |
0x |
Hexadecimal |
ECDSA secp256k1 |
| Litecoin |
L, M, ltc1 |
Base58Check, Bech32 |
ECDSA secp256k1 |
| Monero |
4, 8 |
Base58 |
EdDSA (Ed25519) |
⚠️ Cross-Chain Incompatibility
INTcoin addresses are completely incompatible with Bitcoin, Ethereum, or any other cryptocurrency. The different cryptographic primitives (Dilithium5 vs. ECDSA) and address formats ensure that cross-chain transactions are impossible without atomic swaps or bridges.
Address Validation
Manual Validation
To manually verify an INTcoin address:
- Check the prefix:
- Mainnet: Must start with
INT1 or INT3
- Testnet: Must start with
TINT
- Lightning: Must start with
lnint or lntint
- Verify length:
- On-chain addresses: 34-35 characters
- Lightning invoices: Variable length (typically 200-500 characters)
- Check character set: Base58 (no 0, O, I, l) or Bech32 (lowercase only)
- Validate checksum (requires software)
Programmatic Validation
# Using intcoin-cli
./intcoin-cli validateaddress INT1A2b3C4d5E6f7G8h9I0jK1L2M3N4o5P6q7R8s
# Response:
{
"isvalid": true,
"address": "INT1A2b3C4d5E6f7G8h9I0jK1L2M3N4o5P6q7R8s",
"scriptPubKey": "76a914...",
"ismine": false,
"iswatchonly": false,
"isscript": false,
"iswitness": false
}
Best Practices
✓ Always Verify
Double-check addresses before sending. One wrong character can result in permanent loss of funds.
✓ Use QR Codes
QR codes reduce manual entry errors. Always scan when possible.
✓ Test with Small Amounts
When using a new address or service, send a small test transaction first.
✓ Save Address Labels
Use the wallet's address book to label frequently used addresses.
✗ Don't Share Private Keys
Never share your Dilithium5 private key (4,864 bytes). Only share addresses.
✗ Don't Reuse Addresses
For privacy, generate a new address for each payment received.