def test_genesis_block(genesis_block): blockchain_mview = memoryview(genesis_block) block = Block.from_binary_data(blockchain_mview, offset=0) assert block.header.magic_number == Network.mainnet.value assert block.header.block_size == 285 assert block.header.version == 1 assert block.header.previous_hash == ( '0000000000000000000000000000000000000000000000000000000000000000' ) assert block.header.merkle_hash == ( '4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b' ) assert block.header.time == datetime(2009, 1, 3, 18, 15, 5) assert block.header.bits == 486604799 assert block.header.bits == 0x1d00ffff assert block.header.nonce == 2083236893 assert block.total_size == 293 assert block.hashcash == ( '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f' ) assert len(block.transactions) == 1 # NOQA https://blockchain.info/tx/4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b txn = block.transactions[0] assert txn.version == 1 assert len(txn.inputs) == 1 assert txn.lock_time == datetime(1970, 1, 1, 0, 0) assert txn.txn_hash == ( '4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b' ) txn_input = txn.inputs[0] assert txn_input.is_coinbase assert txn_input.previous_hash == ( '0000000000000000000000000000000000000000000000000000000000000000' ) assert txn_input.seq_no == 0xffffffff assert txn_input.txn_out_id == 0xffffffff assert txn_input.signature_script.hex() == ( '04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e6' '3656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f75742066' '6f722062616e6b73' ) assert txn_input.signature_script.endswith( b'The Times 03/Jan/2009 Chancellor on ' b'brink of second bailout for banks' ) assert len(txn.outputs) == 1 txn_output = txn.outputs[0] assert txn_output.value == 50 * (10 ** 8) assert txn_output.script_pub_key.hex() == ( '4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb' '649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac' ) assert txn_output.address == '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'
def test_genesis_block(genesis_block): blockchain_mview = memoryview(genesis_block) block = Block.from_binary_data(blockchain_mview, offset=0) assert block.header.magic_number == Network.mainnet.value assert block.header.block_size == 285 assert block.header.version == 1 assert block.header.previous_hash == ( '0000000000000000000000000000000000000000000000000000000000000000') assert block.header.merkle_hash == ( '4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b') assert block.header.time == datetime(2009, 1, 3, 18, 15, 5) assert block.header.bits == 486604799 assert block.header.bits == 0x1d00ffff assert block.header.nonce == 2083236893 assert block.total_size == 293 assert block.hashcash == ( '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f') assert len(block.transactions) == 1 # NOQA https://blockchain.info/tx/4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b txn = block.transactions[0] assert txn.version == 1 assert len(txn.inputs) == 1 assert txn.lock_time == datetime(1970, 1, 1, 0, 0) assert txn.txn_hash == ( '4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b') txn_input = txn.inputs[0] assert txn_input.is_coinbase assert txn_input.previous_hash == ( '0000000000000000000000000000000000000000000000000000000000000000') assert txn_input.seq_no == 0xffffffff assert txn_input.txn_out_id == 0xffffffff assert txn_input.signature_script.hex() == ( '04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e6' '3656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f75742066' '6f722062616e6b73') assert txn_input.signature_script.endswith( b'The Times 03/Jan/2009 Chancellor on ' b'brink of second bailout for banks') assert len(txn.outputs) == 1 txn_output = txn.outputs[0] assert txn_output.value == 50 * (10**8) assert txn_output.script_pub_key.hex() == ( '4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb' '649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac') assert txn_output.address == '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'
def test_block_170(block_170): blockchain_mview = memoryview(block_170) block = Block.from_binary_data(blockchain_mview, offset=0) assert block.header.magic_number == Network.mainnet.value assert block.header.block_size == 490 assert block.header.version == 1 assert block.header.previous_hash == ( '000000002a22cfee1f2c846adbd12b3e183d4f97683f85dad08a79780a84bd55' ) assert block.header.merkle_hash == ( '7dac2c5666815c17a3b36427de37bb9d2e2c5ccec3f8633eb91a4205cb4c10ff' ) assert block.header.time == datetime(2009, 1, 12, 3, 30, 25) assert block.header.bits == 486604799 assert block.header.bits == 0x1d00ffff assert block.header.nonce == 1889418792 assert block.total_size == 498 assert block.hashcash == ( '00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee' ) assert len(block.transactions) == 2 coinbase_txn = block.transactions[0] assert coinbase_txn.version == 1 assert len(coinbase_txn.inputs) == 1 assert coinbase_txn.lock_time == datetime(1970, 1, 1, 0, 0) assert coinbase_txn.txn_hash == ( 'b1fea52486ce0c62bb442b530a3f0132b826c74e473d1f2c220bfa78111c5082' ) coinbase_txn_input = coinbase_txn.inputs[0] assert coinbase_txn_input.is_coinbase assert coinbase_txn_input.previous_hash == ( '0000000000000000000000000000000000000000000000000000000000000000' ) assert coinbase_txn_input.seq_no == 0xffffffff assert coinbase_txn_input.txn_out_id == 0xffffffff assert coinbase_txn_input.signature_script.hex() == ( '04ffff001d0102' ) assert len(coinbase_txn.outputs) == 1 coinbase_txn_output = coinbase_txn.outputs[0] assert coinbase_txn_output.value == 50 * (10 ** 8) assert coinbase_txn_output.script_pub_key.hex() == ( '4104d46c4968bde02899d2aa0963367c7a6ce34eec332b32e42e5f3407e052d64ac' '625da6f0718e7b302140434bd725706957c092db53805b821a85b23a7ac61725bac' ) assert coinbase_txn_output.address == '1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc' real_txn = block.transactions[1] assert real_txn.version == 1 assert len(real_txn.inputs) == 1 assert real_txn.lock_time == datetime(1970, 1, 1, 0, 0) assert real_txn.txn_hash == ( 'f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16' ) real_txn_input = real_txn.inputs[0] assert not real_txn_input.is_coinbase assert real_txn_input.previous_hash == ( '0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9' ) assert not real_txn_input.is_coinbase assert real_txn_input.txn_out_id == 0 assert real_txn_input.signature_script.hex() == ( '47304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb' '8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d' '1d0901' ) assert len(real_txn.outputs) == 2 real_txn_output1 = real_txn.outputs[0] assert real_txn_output1.value == 10 * (10 ** 8) assert real_txn_output1.script_pub_key.hex() == ( '4104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa2841' '4e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac' ) assert real_txn_output1.address == '1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3' real_txn_output2 = real_txn.outputs[1] assert real_txn_output2.value == 40 * (10 ** 8) assert real_txn_output2.script_pub_key.hex() == ( '410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5' 'cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac' ) assert real_txn_output2.address == '12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S'
def test_block_170(block_170): blockchain_mview = memoryview(block_170) block = Block.from_binary_data(blockchain_mview, offset=0) assert block.header.magic_number == Network.mainnet.value assert block.header.block_size == 490 assert block.header.version == 1 assert block.header.previous_hash == ( '000000002a22cfee1f2c846adbd12b3e183d4f97683f85dad08a79780a84bd55') assert block.header.merkle_hash == ( '7dac2c5666815c17a3b36427de37bb9d2e2c5ccec3f8633eb91a4205cb4c10ff') assert block.header.time == datetime(2009, 1, 12, 3, 30, 25) assert block.header.bits == 486604799 assert block.header.bits == 0x1d00ffff assert block.header.nonce == 1889418792 assert block.total_size == 498 assert block.hashcash == ( '00000000d1145790a8694403d4063f323d499e655c83426834d4ce2f8dd4a2ee') assert len(block.transactions) == 2 coinbase_txn = block.transactions[0] assert coinbase_txn.version == 1 assert len(coinbase_txn.inputs) == 1 assert coinbase_txn.lock_time == datetime(1970, 1, 1, 0, 0) assert coinbase_txn.txn_hash == ( 'b1fea52486ce0c62bb442b530a3f0132b826c74e473d1f2c220bfa78111c5082') coinbase_txn_input = coinbase_txn.inputs[0] assert coinbase_txn_input.is_coinbase assert coinbase_txn_input.previous_hash == ( '0000000000000000000000000000000000000000000000000000000000000000') assert coinbase_txn_input.seq_no == 0xffffffff assert coinbase_txn_input.txn_out_id == 0xffffffff assert coinbase_txn_input.signature_script.hex() == ('04ffff001d0102') assert len(coinbase_txn.outputs) == 1 coinbase_txn_output = coinbase_txn.outputs[0] assert coinbase_txn_output.value == 50 * (10**8) assert coinbase_txn_output.script_pub_key.hex() == ( '4104d46c4968bde02899d2aa0963367c7a6ce34eec332b32e42e5f3407e052d64ac' '625da6f0718e7b302140434bd725706957c092db53805b821a85b23a7ac61725bac') assert coinbase_txn_output.address == '1PSSGeFHDnKNxiEyFrD1wcEaHr9hrQDDWc' real_txn = block.transactions[1] assert real_txn.version == 1 assert len(real_txn.inputs) == 1 assert real_txn.lock_time == datetime(1970, 1, 1, 0, 0) assert real_txn.txn_hash == ( 'f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16') real_txn_input = real_txn.inputs[0] assert not real_txn_input.is_coinbase assert real_txn_input.previous_hash == ( '0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9') assert not real_txn_input.is_coinbase assert real_txn_input.txn_out_id == 0 assert real_txn_input.signature_script.hex() == ( '47304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb' '8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d' '1d0901') assert len(real_txn.outputs) == 2 real_txn_output1 = real_txn.outputs[0] assert real_txn_output1.value == 10 * (10**8) assert real_txn_output1.script_pub_key.hex() == ( '4104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa2841' '4e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac') assert real_txn_output1.address == '1Q2TWHE3GMdB6BZKafqwxXtWAWgFt5Jvm3' real_txn_output2 = real_txn.outputs[1] assert real_txn_output2.value == 40 * (10**8) assert real_txn_output2.script_pub_key.hex() == ( '410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5' 'cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac') assert real_txn_output2.address == '12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S'