From 42421cc5536b53a430489269feb37c7acdb166bf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Prajczer=20P=C3=A9ter?= <prajczer.peter@hallgato.ppke.hu>
Date: Thu, 26 Mar 2020 09:56:26 +0100
Subject: [PATCH] added part 2 of ITKoin

---
 .gitignore                  |   1 +
 ITKoin_02_Prajczer_Peter.py |  69 ++++++++++++++++++++++++------------
 chain_01.txt                | Bin 0 -> 3812 bytes
 csmkey_03_id.txt            |   1 +
 csmkey_04_id.txt            |   1 +
 pending_01.txt              | Bin 0 -> 6 bytes
 readme.md                   |   0
 7 files changed, 49 insertions(+), 23 deletions(-)
 create mode 100644 chain_01.txt
 create mode 100644 csmkey_03_id.txt
 create mode 100644 csmkey_04_id.txt
 create mode 100644 pending_01.txt
 delete mode 100644 readme.md

diff --git a/.gitignore b/.gitignore
index 4fd2ccc..caa23c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 /.idea/
 *.pem
 *.xml
+/machvenv
diff --git a/ITKoin_02_Prajczer_Peter.py b/ITKoin_02_Prajczer_Peter.py
index 3139809..f96b323 100644
--- a/ITKoin_02_Prajczer_Peter.py
+++ b/ITKoin_02_Prajczer_Peter.py
@@ -21,7 +21,10 @@ class ITKoin:
 #        self.my_privatekey
 #        self.my_publickey
 #        self.my_id
-        self.ITKoin_users = ['csmkey_03_id.txt', 'csmkey_04_id.txt'] # Ez egy lista, ahová s résztvevők id-jait tartalmazó file-neveket kell felsorolni
+        # Ez egy lista, ahová s résztvevők id-jait tartalmazó file-neveket kell felsorolni
+        # mindegyikben benne van a publikus kulcs lenyomata, ezek az egyenek
+
+        self.ITKoin_users = ['csmkey_03_id.txt', 'csmkey_04_id.txt']
         self.initial_csaposhi_offering = 100
 
 
@@ -86,10 +89,10 @@ class ITKoin:
         signatureobject = pkcs1_15.new(self.my_privatekey) # hozz létre egy signature objektumot
         hashobject = self.create_hashobject(data) # az adatot töltsd be egy hash objektumba a create_hashobject(data) használatával
         signaturevalue = signatureobject.sign(hashobject) # készítsd el az aláírás értéket a sign függvénnyel
-        print(signaturevalue)
+        # print(signaturevalue)
         b64signaturevalue = b64encode(signaturevalue) # kódold base64 kódolással
-        print(b64signaturevalue)
-        print(b64signaturevalue.decode())
+        # print(b64signaturevalue)
+        # print(b64signaturevalue.decode())
         return b64signaturevalue.decode()
 
     def verify_signature(self, data, b64signaturevalue, rsapublickey):
@@ -107,16 +110,21 @@ class ITKoin:
         f.close()
         return
 
+    # ide kell majd irni a hazit, hogy ellenorizuk a betoltott chaint
     def load_chain(self):
         fileobject = open(self.chain_filename, 'rb')
         self.chain = pickle.load(fileobject)
+        print("\n BETOLTOTT CHAIN \n")
         pprint(self.chain)
         return
 
+    # itt kell ellenorzini, hogy az ossze tranzakcio valid, es a blokkba bekerulhet
     def load_pending_transactions(self):
         fileobject = open(self.pending_transactions_filename, 'rb')
         self.pending_transactions = pickle.load(fileobject)
+        print("\n BETOLTOTT PENDING TRANSACTIONS \n")
         pprint(self.pending_transactions)
+        # a validated_pending_transactionskell majd belerakni
         validated_pending_transactions = []
         while len(self.pending_transactions) != 0:
             transaction = self.pending_transactions.pop()
@@ -125,6 +133,8 @@ class ITKoin:
         self.pending_transactions = validated_pending_transactions
         return
 
+    # itt azokat szedjuk ki amelyik szerepel mint bevetel, minden tranzkcion ami a mi ID/nk van,
+    # tipikusank minden outputban 2 van
     def find_unspent_outputs(self):
         self.unspent_outputs = []
         self.my_unspent_outputs = []
@@ -140,15 +150,18 @@ class ITKoin:
                     if output['recipient'] == self.my_id:
                         self.my_unspent_outputs.append([transaction['txid'], transaction['outputs'].index(output), output['csaposhi']])
                 for input in transaction['inputs']:
-                    self.unspent_outputs.remove(input) # minden input biztosan szerepelt a lánc korábbi outputjaként
-                    if input in self.my_unspent_outputs: # a remove() hibát dob, ha úgy törlünk a listából valamit, hogy nem is volt benne
-                        self.my_unspent_outputs.remove(input)
+                    self.unspent_outputs.remove(input[0:3]) # minden input biztosan szerepelt a lánc korábbi outputjaként
+                    if input[0:3] in self.my_unspent_outputs: # a remove() hibát dob, ha úgy törlünk a listából valamit, hogy nem is volt benne
+                        self.my_unspent_outputs.remove(input[0:3])
+        print("\n EL NEM KOLTOTT KIMENETEK \n")
         pprint(self.unspent_outputs)
+        print("\n EN EL NEM KOLTOTT KIMENETEIM")
         pprint(self.my_unspent_outputs)
         return
 
     def mine(self):
         if len(self.chain) == 0:
+            # legelso blocknak mindig ez lesz az eleje, ez jelzi, hogy az elso: ide lehet ellenorizni, hogy nehogy ilyen legyen a hash lenyomata az uj blokknak
             previous_block_header_hash = 'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'
         else:
             previous_block = self.chain[-1]
@@ -162,6 +175,7 @@ class ITKoin:
             'previous_block_header_hash': previous_block_header_hash,
             'transactions_hash' : self.create_hashhexvalue(self.pending_transactions),
         }
+        # ez itt a konkret banyaszas, keressuk a jo lenyomatot
         while True:
             block_header_hash = self.create_hashhexvalue(block_header)
             if block_header_hash[:4] == "0000":
@@ -172,9 +186,11 @@ class ITKoin:
             'block_header': block_header,
             'transactions': self.pending_transactions
         }
+        print("\n blokkunk: \n")
         pprint(block)
 
         self.chain.append(block)
+        print("\n chain: \n")
         pprint (self.chain)
         self.save_list(self.chain, self.chain_filename)
         self.pending_transactions = []
@@ -185,7 +201,8 @@ class ITKoin:
         self.pending_transactions = []
         while len(self.ITKoin_users) > 0:
             recipient_id = self.load_id (self.ITKoin_users.pop()) # előveszi a következő id file nevét és beolvassa az id-t
-            for tr in self.pending_transactions: # nem szerepelhet kétszer ugyanaz a recipient, mert akkor a txid azonos lesz
+            # csaposhi meg a recipientbol generaljuk a tranzakcio ID-t!!
+            for tr in self.pending_transactions: # nem szerepelhet kétszer ugyanaz a recipient, mert akkor a tranzakcio azonos lesz
                 for op in tr['outputs']:
                     if recipient_id == op['recipient']:
                         pprint ('HIBA: Ismétlődő recipient adatok az első blokk generálásakor.')
@@ -198,6 +215,7 @@ class ITKoin:
                 'outputs': outputs}
             transaction ['txid'] = self.create_hashhexvalue(transaction) # a tranzakció lenyomata lesz az azonosítója egyben
             self.pending_transactions.append(transaction)
+        print("\n PENDING TRANSACTIONS \n")
         pprint(self.pending_transactions)
         self.mine()
         return
@@ -207,16 +225,18 @@ class ITKoin:
         used_outputs=[]
         while (sum < csaposhi):
             next_output=self.my_unspent_outputs.pop()
-            pprint(next_output)
+            # pprint(next_output)
             used_outputs.append(next_output)
-            pprint(next_output)
+            # pprint(next_output)
             sum += next_output[2] # ebben a listapozícióban van a hivatkozott outputban kapott összeg
+            print("\n TELJES OSSZEG \n")
             pprint(sum)
         inputs = used_outputs
         pprint(inputs)
         for input in inputs: # az inputsban szándékosan nincs benne az akkori recipient, mert ezt abból a tranzakcióból kell kivenni és ellenőrizni
             input.append(self.create_signature(input[0])) # input[3] az aláírás érték base64 kódolással
             input.append(self.my_publickey.export_key().decode('ascii')) # input[4] a publikus kulcsom PEM formátumban
+            print("\n SIGNATURE ELLENORZES \n")
             pprint(self.verify_signature(input[0], input[3], RSA.import_key(input[4])))
         outputs = [{
             'csaposhi': csaposhi,
@@ -230,22 +250,25 @@ class ITKoin:
             'outputs': outputs}
         transaction ['txid'] = self.create_hashhexvalue(transaction) # a tranzakció lenyomata lesz az azonosítója egyben
         self.pending_transactions.append(transaction)
+        print("\n PENDING TRANSACTIONS \n")
         pprint(self.pending_transactions)
         return
 
 
+if __name__ == '__main__':
+    mycoin=ITKoin()
+    # mycoin.generate_rsa_key('csmkey_03')
+    # mycoin.generate_rsa_key('csmkey_04')
+    # mycoin.generate_first_block()
+    mycoin.load_my_private_key()
+    mycoin.load_chain()
+    mycoin.find_unspent_outputs()
+    mycoin.new_transaction(20, 'e64bcaefab6b9e1a88447f399d35959a3f0015e2cf48a9ebb866bfe368d3e55c')
+    mycoin.mine()
+    # signature = mycoin.create_signature(2)
+    # pprint(signature)
+    # pprint(mycoin.my_publickey)
+    # print(mycoin.verify_signature(2, signature, mycoin.my_publickey))
 
-mycoin=ITKoin()
-# mycoin.generate_rsa_key('csmkey_04')
-mycoin.generate_first_block()
-mycoin.load_my_private_key()
-mycoin.load_chain()
-mycoin.find_unspent_outputs()
-mycoin.new_transaction(20, 'c5425eda6099b4f481357fb12d17cda62e6f391ac49c83e9d465128dc47109b0')
-#signature = mycoin.create_signature(2)
-#pprint(signature)
-#pprint(mycoin.my_publickey)
-#print(mycoin.verify_signature(2, signature, mycoin.my_publickey))
-
-mycoin.mine()
+    mycoin.mine()
 
diff --git a/chain_01.txt b/chain_01.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f26348233e5a38bb0a049d3c2306291671dfcbf0
GIT binary patch
literal 3812
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
PM3iPY#}-DGrs@Fz-feiJ

literal 0
HcmV?d00001

diff --git a/csmkey_03_id.txt b/csmkey_03_id.txt
new file mode 100644
index 0000000..5a01fc6
--- /dev/null
+++ b/csmkey_03_id.txt
@@ -0,0 +1 @@
+028f631b828c8c5c83f80cd8a195b6dd2e129fd5ff5c6a7f511060aa7e7ff1b0
\ No newline at end of file
diff --git a/csmkey_04_id.txt b/csmkey_04_id.txt
new file mode 100644
index 0000000..62479c3
--- /dev/null
+++ b/csmkey_04_id.txt
@@ -0,0 +1 @@
+e64bcaefab6b9e1a88447f399d35959a3f0015e2cf48a9ebb866bfe368d3e55c
\ No newline at end of file
diff --git a/pending_01.txt b/pending_01.txt
new file mode 100644
index 0000000000000000000000000000000000000000..482c0e338367d0aeb4ddc43602ac727276f77052
GIT binary patch
literal 6
NcmZo*jxA)+0{{jJ0e}Di

literal 0
HcmV?d00001

diff --git a/readme.md b/readme.md
deleted file mode 100644
index e69de29..0000000
-- 
GitLab