@ -339,3 +339,37 @@ class TestBlockchain(SequentialTestCase):
for b in ( chain_u , chain_l , chain_z ) :
for b in ( chain_u , chain_l , chain_z ) :
self . assertTrue ( all ( [ b . can_connect ( b . read_header ( i ) , False ) for i in range ( b . height ( ) ) ] ) )
self . assertTrue ( all ( [ b . can_connect ( b . read_header ( i ) , False ) for i in range ( b . height ( ) ) ] ) )
class TestVerifyHeader ( SequentialTestCase ) :
# Data for Bitcoin block header #100.
valid_header = " 0100000095194b8567fe2e8bbda931afd01a7acd399b9325cb54683e64129bcd00000000660802c98f18fd34fd16d61c63cf447568370124ac5f3be626c2e1c3c9f0052d19a76949ffff001d33f3c25d "
target = Blockchain . bits_to_target ( 0x1d00ffff )
prev_hash = " 00000000cd9b12643e6854cb25939b39cd7a1ad0af31a9bd8b2efe67854b1995 "
def setUp ( self ) :
super ( ) . setUp ( )
self . header = deserialize_header ( bfh ( self . valid_header ) , 100 )
def test_valid_header ( self ) :
Blockchain . verify_header ( self . header , self . prev_hash , self . target )
def test_expected_hash_mismatch ( self ) :
with self . assertRaises ( Exception ) :
Blockchain . verify_header ( self . header , self . prev_hash , self . target ,
expected_header_hash = " foo " )
def test_prev_hash_mismatch ( self ) :
with self . assertRaises ( Exception ) :
Blockchain . verify_header ( self . header , " foo " , self . target )
def test_target_mismatch ( self ) :
with self . assertRaises ( Exception ) :
other_target = Blockchain . bits_to_target ( 0x1d00eeee )
Blockchain . verify_header ( self . header , self . prev_hash , other_target )
def test_insufficient_pow ( self ) :
with self . assertRaises ( Exception ) :
self . header [ " nonce " ] = 42
Blockchain . verify_header ( self . header , self . prev_hash , self . target )