- Add pytest test suite for all 5 address types (P2PK, P2PKH, P2SH, P2WPKH, P2TR) - Test output fields, address prefixes per network, key lengths and uniqueness - Each test file prints the SecretScan URL for manual address verification - Add pytest to requirements.txt
68 lines
2.0 KiB
Python
68 lines
2.0 KiB
Python
import sys
|
|
import os
|
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
|
|
|
|
from src.p2pk import generate_p2pk
|
|
|
|
SECRETSCAN_URL = "https://secretscan.org/Bitcoin?address={}"
|
|
|
|
NETWORKS = ['mainnet', 'testnet', 'regtest']
|
|
|
|
|
|
def test_p2pk_fields():
|
|
result = generate_p2pk('mainnet', compressed=True)
|
|
assert set(result.keys()) == {'network', 'script_type', 'private_key_hex', 'private_key_wif', 'public_key_hex'}
|
|
|
|
|
|
def test_p2pk_script_type():
|
|
result = generate_p2pk('mainnet')
|
|
assert result['script_type'] == 'p2pk'
|
|
|
|
|
|
def test_p2pk_private_key_length():
|
|
result = generate_p2pk('mainnet')
|
|
assert len(result['private_key_hex']) == 64
|
|
|
|
|
|
def test_p2pk_compressed_pubkey_length():
|
|
result = generate_p2pk('mainnet', compressed=True)
|
|
assert len(result['public_key_hex']) == 66
|
|
assert result['public_key_hex'][:2] in ('02', '03')
|
|
|
|
|
|
def test_p2pk_uncompressed_pubkey_length():
|
|
result = generate_p2pk('mainnet', compressed=False)
|
|
assert len(result['public_key_hex']) == 130
|
|
assert result['public_key_hex'][:2] == '04'
|
|
|
|
|
|
def test_p2pk_wif_mainnet():
|
|
result = generate_p2pk('mainnet', compressed=True)
|
|
assert result['private_key_wif'][0] in ('K', 'L')
|
|
|
|
|
|
def test_p2pk_wif_testnet():
|
|
result = generate_p2pk('testnet', compressed=True)
|
|
assert result['private_key_wif'][0] == 'c'
|
|
|
|
|
|
def test_p2pk_all_networks():
|
|
for network in NETWORKS:
|
|
result = generate_p2pk(network)
|
|
assert result['network'] == network
|
|
|
|
|
|
def test_p2pk_unique_keys():
|
|
r1 = generate_p2pk('mainnet')
|
|
r2 = generate_p2pk('mainnet')
|
|
assert r1['private_key_hex'] != r2['private_key_hex']
|
|
|
|
|
|
def test_p2pk_print_secretscan(capsys):
|
|
# P2PK has no address — print the public key for manual reference
|
|
result = generate_p2pk('mainnet')
|
|
print(f"\n[P2PK] Public key: {result['public_key_hex']}")
|
|
print(f"[P2PK] SecretScan (search by pubkey): https://secretscan.org/")
|
|
captured = capsys.readouterr()
|
|
assert 'secretscan.org' in captured.out
|