changeset 3:3d83609e12a1

get value in output
author Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
date Sun, 17 Oct 2021 17:33:26 +0200
parents 5b16e6df6a59
children e7a84094bf07
files src/block.py
diffstat 1 files changed, 33 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/block.py	Sun Oct 17 11:14:46 2021 +0200
+++ b/src/block.py	Sun Oct 17 17:33:26 2021 +0200
@@ -28,9 +28,21 @@
     version = int()
     number_of_inputs = int()
     inputs = []
+    number_of_outputs = int()
+    outputs = []
 
-    class Inputs:
-        pass
+    class TransactionInput:
+        id = str()
+        is_coinbase = False
+        vout = int()
+        script_sig_size = int()
+        script_sig = str()
+        sequence = int()
+
+    class TransactionOutput:
+        value = float()
+        script_pub_key_size = int()
+        script_pub_key = str()
 
 
 def read_block(file):
@@ -63,20 +75,25 @@
     # Number of transactions (varInt)
     block.number_of_transactions = get_variable_int(file)
 
-    # Compute transaction ID
-    # Get remaining bytes until the end of the block
-    transaction = Transaction()
-    bytes_read = file.tell()
-    whole_block_size = block.size + 8  # Plus magic number and block size
-    transaction_data_size = whole_block_size - bytes_read
-    transaction_data = file.read(transaction_data_size)
-    file.seek(bytes_read)  # Set position to where 'transaction data' starts
-    transaction_id = hashlib.sha256(transaction_data).digest()
-    transaction_id = hashlib.sha256(transaction_id).digest()
-    transaction.id = transaction_id[::-1].hex()
+    for transaction_number in range(block.number_of_transactions):
+        transaction = Transaction()
+        transaction.version = int.from_bytes(read_bytes(file, 4), 'big')
+        transaction.number_of_inputs = get_variable_int(file)
+
+        for input_number in range(transaction.number_of_inputs):
+            transaction_input = transaction.TransactionInput()
+            transaction_input.id = read_bytes(file, 32).hex()
+            if transaction_input.id == '0000000000000000000000000000000000000000000000000000000000000000':
+                transaction_input.is_coinbase = True
 
-    transaction.version = int.from_bytes(read_bytes(file, 4), 'little')
-    transaction.number_of_inputs = get_variable_int(file)
+            transaction_input.vout = int.from_bytes(read_bytes(file, 4), 'little')
+            transaction_input.script_sig_size = get_variable_int(file)
+            transaction_input.script_sig = read_bytes(file, transaction_input.script_sig_size, 'forward').hex()
+            transaction_input.sequence = int.from_bytes(read_bytes(file, 4), 'little')
 
+        transaction.number_of_outputs = get_variable_int(file)
 
-
+        for output_number in range(transaction.number_of_outputs):
+            transaction_output = transaction.TransactionOutput()
+            transaction_output.value = float.fromhex(read_bytes(file, 8).hex())
+            transaction_output.value /= 100000000  # Satoshis to BTC