import sys import os sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) from src.p2wpkh import generate_segwit_address SECRETSCAN_URL = "https://secretscan.org/Bitcoin?address={}" NETWORKS = ['mainnet', 'testnet', 'regtest'] def test_p2wpkh_fields(): result = generate_segwit_address('mainnet') assert set(result.keys()) == {'network', 'script_type', 'private_key_hex', 'private_key_wif', 'public_key_hex', 'address'} def test_p2wpkh_script_type(): result = generate_segwit_address('mainnet') assert result['script_type'] == 'p2wpkh' def test_p2wpkh_address_mainnet(): result = generate_segwit_address('mainnet') assert result['address'].startswith('bc1q') def test_p2wpkh_address_testnet(): result = generate_segwit_address('testnet') assert result['address'].startswith('tb1q') def test_p2wpkh_address_regtest(): result = generate_segwit_address('regtest') assert result['address'].startswith('bcrt1q') def test_p2wpkh_private_key_length(): result = generate_segwit_address('mainnet') assert len(result['private_key_hex']) == 64 def test_p2wpkh_compressed_pubkey(): result = generate_segwit_address('mainnet', compressed=True) assert len(result['public_key_hex']) == 66 assert result['public_key_hex'][:2] in ('02', '03') def test_p2wpkh_unique_addresses(): r1 = generate_segwit_address('mainnet') r2 = generate_segwit_address('mainnet') assert r1['address'] != r2['address'] def test_p2wpkh_print_secretscan(capsys): result = generate_segwit_address('mainnet') url = SECRETSCAN_URL.format(result['address']) print(f"\n[P2WPKH] Address: {result['address']}") print(f"[P2WPKH] Verify on SecretScan: {url}") captured = capsys.readouterr() assert 'secretscan.org' in captured.out