Una string de bloques es una serie descentralizada de registros fijos con marca de tiempo que contiene datos de cualquier tamaño y está controlada por una gran red de computadoras que se encuentran dispersas por todo el mundo y no son propiedad de una sola organización. Cada bloque está protegido y conectado entre sí mediante tecnología hash que lo protege de ser manipulado por una persona no autorizada.
Creando Blockchain usando Python, extrayendo nuevos bloques y mostrando toda la string de bloques:
- Los datos se almacenarán en formato JSON, que es muy fácil de implementar y fácil de leer. Los datos se almacenan en un bloque y el bloque contiene varios datos. Todos y cada uno de los minutos se agregan múltiples bloques y para diferenciar uno de otro usaremos huellas dactilares.
- La toma de huellas dactilares se realiza mediante hash y, para ser más concretos, utilizaremos el algoritmo hash SHA256. Cada bloque contendrá su propio hash y también el hash de la función anterior para que no pueda ser manipulado.
- Esta toma de huellas dactilares se utilizará para enstringr los bloques. Cada bloque se adjuntará al bloque anterior que tenga su hash y al siguiente bloque dando su hash.
- La extracción del nuevo bloque se realiza al encontrar con éxito la respuesta a la prueba de trabajo. Para que la minería sea difícil, la prueba de trabajo debe ser lo suficientemente difícil como para ser explotada.
- Después de extraer el bloque con éxito, el bloque se agregará a la string.
- Después de extraer varios bloques, se debe verificar la validez de la string para evitar cualquier tipo de manipulación de la string de bloques.
- Luego, la aplicación web se creará utilizando Flask y se implementará de forma local o pública según la necesidad del usuario.
Python3
# Python program to create Blockchain # For timestamp import datetime # Calculating the hash # in order to add digital # fingerprints to the blocks import hashlib # To store data # in our blockchain import JSON # Flask is for creating the web # app and jsonify is for # displaying the blockchain from flask import Flask, jsonify class Blockchain: # This function is created # to create the very first # block and set its hash to "0" def __init__(self): self.chain = [] self.create_block(proof=1, previous_hash='0') # This function is created # to add further blocks # into the chain def create_block(self, proof, previous_hash): block = {'index': len(self.chain) + 1, 'timestamp': str(datetime.datetime.now()), 'proof': proof, 'previous_hash': previous_hash} self.chain.append(block) return block # This function is created # to display the previous block def print_previous_block(self): return self.chain[-1] # This is the function for proof of work # and used to successfully mine the block def proof_of_work(self, previous_proof): new_proof = 1 check_proof = False while check_proof is False: hash_operation = hashlib.sha256( str(new_proof**2 - previous_proof**2).encode()).hexdigest() if hash_operation[:5] == '00000': check_proof = True else: new_proof += 1 return new_proof def hash(self, block): encoded_block = json.dumps(block, sort_keys=True).encode() return hashlib.sha256(encoded_block).hexdigest() def chain_valid(self, chain): previous_block = chain[0] block_index = 1 while block_index < len(chain): block = chain[block_index] if block['previous_hash'] != self.hash(previous_block): return False previous_proof = previous_block['proof'] proof = block['proof'] hash_operation = hashlib.sha256( str(proof**2 - previous_proof**2).encode()).hexdigest() if hash_operation[:5] != '00000': return False previous_block = block block_index += 1 return True # Creating the Web # App using flask app = Flask(__name__) # Create the object # of the class blockchain blockchain = Blockchain() # Mining a new block @app.route('/mine_block', methods=['GET']) def mine_block(): previous_block = blockchain.print_previous_block() previous_proof = previous_block['proof'] proof = blockchain.proof_of_work(previous_proof) previous_hash = blockchain.hash(previous_block) block = blockchain.create_block(proof, previous_hash) response = {'message': 'A block is MINED', 'index': block['index'], 'timestamp': block['timestamp'], 'proof': block['proof'], 'previous_hash': block['previous_hash']} return jsonify(response), 200 # Display blockchain in json format @app.route('/get_chain', methods=['GET']) def display_chain(): response = {'chain': blockchain.chain, 'length': len(blockchain.chain)} return jsonify(response), 200 # Check validity of blockchain @app.route('/valid', methods=['GET']) def valid(): valid = blockchain.chain_valid(blockchain.chain) if valid: response = {'message': 'The Blockchain is valid.'} else: response = {'message': 'The Blockchain is not valid.'} return jsonify(response), 200 # Run the flask server locally app.run(host='127.0.0.1', port=5000)
Salida (mine_block):
{ "index":2, "message":"A block is MINED", "previous_hash":"2d83a826f87415edb31b7e12b35949b9dbf702aee7e383cbab119456847b957c", "proof":533, "timestamp":"2020-06-01 22:47:59.309000" }
Salida (get_chain):
{ "chain":[{"index":1, "previous_hash":"0", "proof":1, "timestamp":"2020-06-01 22:47:05.915000"},{"index":2, "previous_hash":"2d83a826f87415edb31b7e12b35949b9dbf702aee7e383cbab119456847b957c", "proof":533, "timestamp":"2020-06-01 22:47:59.309000"}], "length":2 }
Salida (válida):
{"message":"The Blockchain is valid."}
Publicación traducida automáticamente
Artículo escrito por gluttony777 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA