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