diff --git a/.gitignore b/.gitignore index 4fd2ccc01910a9bf013173c202b9e6ddb28e57f6..caa23c77b1db2e267c9c74e952e9256c5ce25f14 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 3139809fa44f4b05ea80e9f6fe74cfccaeaddc6d..f96b323c07423d073841f7c444df0652d1820290 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 Binary files /dev/null and b/chain_01.txt differ diff --git a/csmkey_03_id.txt b/csmkey_03_id.txt new file mode 100644 index 0000000000000000000000000000000000000000..5a01fc6250a506d2a1222f49245e0f4d5a4bb858 --- /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 0000000000000000000000000000000000000000..62479c3adb19d4457dd3678a0f5878993c607949 --- /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 Binary files /dev/null and b/pending_01.txt differ diff --git a/readme.md b/readme.md deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000