def fitxer_100_blocs_valids_fins_XX_DNI(): """ Un fitxer amb una cadena de 100 blocs que només sigui vàlida fins al bloc XX on XX són les dues darreres xifres del vostre DNI. """ XX_DNI = 81 # ara mateix NO INCLÒS EN ELS VÀLIDS rsa_0 = blockchain.rsa_key() size_message = 256 m_0 = random.randint(2**(size_message // 2 - 1), 2**(size_message // 2) - 1) t_0 = blockchain.transaction(m_0, rsa_0) cadena_de_blocs = blockchain.block_chain(t_0) for i in range(1, XX_DNI): print(i) rsa = blockchain.rsa_key() m = random.randint(2**(size_message // 2 - 1), 2**(size_message // 2) - 1) t = blockchain.transaction(m, rsa) cadena_de_blocs.add_block(t) print(cadena_de_blocs.verify()) for i in range(XX_DNI, 100): print(i) rsa = blockchain.rsa_key() m = random.randint(2**(size_message // 2 - 1), 2**(size_message // 2) - 1) t = blockchain.transaction(m, rsa) t.signature = random.randint( 0, sys.maxsize ) # fem que sigui invàlida la transacció, també podríem alterar el hash etc # Nota: en tindríem prou amb alterar-ne un de sol (el 81) perquè els següents també fossin invàlids, es trenca la cadena cadena_de_blocs.add_block(t) print(cadena_de_blocs.verify()) fitxer_de_sortida = '81_blocks_valids.block' with open(fitxer_de_sortida, 'wb') as file: pickle.dump(cadena_de_blocs, file)
def create_wrong_blockchain_100(): DNI = 19 RSA = rsa_key() num_blocks = 100 now = time() transactions = map( lambda i: transaction( int(hashlib.sha256(f"Transaction #{i}".encode()).hexdigest(), 16), RSA), range(100)) blockChain = block_chain(next(transactions)) for _ in range(1, DNI): blockChain.add_block(next(transactions)) print(f'New block from transaction #{_ + 1} added!') print(f"Pre-verification: {blockChain.verify()}") for _ in range(DNI, num_blocks): print(f'Wrong block from transaction #{_ + 1} added!') blockChain.add_wrong_block(next(transactions)) with open(f'100_blocks_{DNI}_wrong.pickle', 'wb') as f: pickle.dump(blockChain, f) print(f"Verification: {blockChain.verify()}\nTime elapsed: {time() - now}")
def py_to_cpp(obj_to_covert, obj_to_covert_type): if obj_to_covert_type == "chain": # Create a vector of blocks chain_vector = vectorblock() chain = obj_to_covert for each_block in chain: # Create a c++ block struct block_struct = block() block_struct.index = each_block['index'] block_struct.prev_hash = each_block['prev_hash'] block_struct.proof = each_block['proof'] block_struct.timestamp = each_block['timestamp'] block_struct.transactions = py_to_cpp(each_block['transactions'], "transactions") chain_vector.push_back(block_struct) return chain_vector if obj_to_covert_type == "transactions": # Create a vector of transactions transaction_vector = vectortransaction() transactions = obj_to_covert for each_transaction in transactions: # Create a c++ transaction struct transaction_struct = transaction() transaction_struct.sender = each_transaction['sender'] transaction_struct.recipient = each_transaction['recipient'] transaction_struct.amount = each_transaction['amount'] transaction_vector.push_back(transaction_struct) return transaction_vector
def fitxer_100_blocs_valids(): """Un fitxer amb una cadena vàlida de 100 blocs""" rsa_0 = blockchain.rsa_key() m_0 = random.randint(0,sys.maxsize) t_0 = blockchain.transaction(m_0,rsa_0) cadena_de_blocs = blockchain.block_chain(t_0) for i in range (1,100): print(i) rsa = blockchain.rsa_key() m = random.randint(0,sys.maxsize) t = blockchain.transaction(m,rsa) cadena_de_blocs.add_block(t) print(cadena_de_blocs.verify()) fitxer_de_sortida = '100_blocks_valids.block' with open(fitxer_de_sortida, 'wb') as file: pickle.dump(cadena_de_blocs, file)