@@ -93,6 +93,36 @@ def do_test(exp_hex, wif, c_wif, public_pair_sec, c_public_pair_sec, address_b58
9393 "18fKPR8s1MQeckAsgya1sx6Z3WmFXd8wv8" ,
9494 "1DVJQzgnyCahXdoXdJ3tjGA3hrYVgKpvgK" )
9595
96+ def test_p2tr_address (self ):
97+ # Test P2TR (taproot) address generation
98+ # Using secret exponent 1, which is a known test vector
99+ private_key = network .keys .private (secret_exponent = 1 )
100+
101+ # Get P2TR address from ku_output_for_address
102+ p2tr_addresses = {}
103+ for k , v , text in private_key .ku_output_for_address ():
104+ if 'taproot' in k :
105+ p2tr_addresses [k ] = v
106+
107+ # Verify the addresses are generated
108+ self .assertIn ('address_taproot' , p2tr_addresses )
109+ self .assertIn ('BTC_address_taproot' , p2tr_addresses )
110+
111+ # Verify the expected address (from BIP 350 test vectors)
112+ expected_address = "bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0"
113+ self .assertEqual (p2tr_addresses ['address_taproot' ], expected_address )
114+ self .assertEqual (p2tr_addresses ['BTC_address_taproot' ], expected_address )
115+
116+ # Test with public key only
117+ public_key = private_key .public_copy ()
118+ p2tr_addresses_pub = {}
119+ for k , v , text in public_key .ku_output_for_address ():
120+ if 'taproot' in k :
121+ p2tr_addresses_pub [k ] = v
122+
123+ # Verify public key generates the same address
124+ self .assertEqual (p2tr_addresses_pub ['address_taproot' ], expected_address )
125+
96126
97127if __name__ == '__main__' :
98128 unittest .main ()
0 commit comments