# HG changeset patch # User Dennis Concepcion Martin # Date 1635102049 -7200 # Node ID e218f70e19e9b18cfabb23f0bc80ee153f0ee589 # Parent 4d259e84160d6c4cf61725e89c0c8eebb69512fa refactor code diff -r 4d259e84160d -r e218f70e19e9 main.py --- a/main.py Sun Oct 24 17:38:23 2021 +0200 +++ b/main.py Sun Oct 24 21:00:49 2021 +0200 @@ -8,8 +8,14 @@ print('File size in bytes: {}'. format(file_size)) with open(filename, 'rb') as f: + + counter = 0 while f.tell() < file_size: + counter += 1 block = deserialize_block(f) + if counter == 3456: + print(block) + exit() if __name__ == '__main__': diff -r 4d259e84160d -r e218f70e19e9 src/puppy/block.py --- a/src/puppy/block.py Sun Oct 24 17:38:23 2021 +0200 +++ b/src/puppy/block.py Sun Oct 24 21:00:49 2021 +0200 @@ -16,13 +16,13 @@ block = Block() block.magic_number = f.read(4).hex() - block.block_size = f.read(4)[::-1].hex() - block_header, block.block_hash = deserialize_header(f) - block.number_of_transactions = get_var_int(f) + block.size = f.read(4)[::-1].hex() + block_header, block.id = deserialize_header(f) + block.transaction_count = get_var_int(f) transactions = [] - for transaction_number in range(int(block.number_of_transactions, 16)): - transactions.append(deserialize_transaction_data(f, block.block_size)) + for transaction_number in range(int(block.transaction_count, 16)): + transactions.append(deserialize_transaction_data(f)) block_dict = block.__dict__ block_dict['header'] = block_header @@ -47,7 +47,7 @@ header = Header() header.version = f.read(4)[::-1].hex() - header.previous_block_hash = f.read(32)[::-1].hex() + header.previous_block_id = f.read(32)[::-1].hex() header.merkle_root = f.read(32)[::-1].hex() header.time = f.read(4)[::-1].hex() header.bits = f.read(4)[::-1].hex() @@ -56,23 +56,21 @@ return header.__dict__, block_hash -def deserialize_transaction_data(f, block_size): +def deserialize_transaction_data(f): """ Deserialize transaction data More info: https://learnmeabitcoin.com/technical/transaction-data :param f: buffer, required - :param block_size: string, required :return: dict """ + transaction = Transaction() start_transaction_data = f.tell() - - transaction = Transaction() transaction.version = f.read(4)[::-1].hex() - transaction.number_of_inputs = get_var_int(f) + transaction.input_count = get_var_int(f) transaction_inputs = [] - for input_number in range(int(transaction.number_of_inputs, 16)): + for input_number in range(int(transaction.input_count, 16)): transaction_input = TransactionInput() transaction_input.id = f.read(32)[::-1].hex() transaction_input.vout = f.read(4)[::-1].hex() @@ -81,10 +79,10 @@ transaction_input.sequence = f.read(4)[::-1].hex() transaction_inputs.append(transaction_input.__dict__) - transaction.number_of_outputs = get_var_int(f) + transaction.output_count = get_var_int(f) transaction_outputs = [] - for output_number in range(int(transaction.number_of_outputs, 16)): + for output_number in range(int(transaction.output_count, 16)): transaction_output = TransactionOutput() transaction_output.value = f.read(8)[::-1].hex() transaction_output.script_pub_key_size = get_var_int(f) diff -r 4d259e84160d -r e218f70e19e9 src/puppy/block_structure.py --- a/src/puppy/block_structure.py Sun Oct 24 17:38:23 2021 +0200 +++ b/src/puppy/block_structure.py Sun Oct 24 21:00:49 2021 +0200 @@ -1,13 +1,13 @@ class Block: - block_hash = str() + id = str() magic_number = str() - block_size = str() - number_of_transactions = str() + size = str() + transaction_count = str() class Header: version = str() - previous_block_hash = str() + previous_block_id = str() merkle_root = str() time = str() bits = str() @@ -17,8 +17,8 @@ class Transaction: id = str() version = str() - number_of_inputs = str() - number_of_outputs = str() + input_count = str() + output_count = str() lock_time = str() diff -r 4d259e84160d -r e218f70e19e9 src/puppy/helpers.py --- a/src/puppy/helpers.py Sun Oct 24 17:38:23 2021 +0200 +++ b/src/puppy/helpers.py Sun Oct 24 21:00:49 2021 +0200 @@ -38,4 +38,4 @@ h = hashlib.sha256(data).digest() h = hashlib.sha256(h).digest() - return h[::-1].hex() \ No newline at end of file + return h[::-1].hex()