J'ai grossièrement compris le contenu de la blockchain dans le cours Udemy, alors je l'ai implémenté. Nous l'implémentons nous-mêmes en fonction du contenu du cours. Jun Sakai, ingénieur actif dans la Silicon Valley, enseigne ce cours, et en suivant ce cours, vous serez en mesure de créer les programmes suivants sans rien regarder. Wallet et proof_of_work, qui ne sont pas implémentés dans cet article, sont également implémentés, donc si vous êtes intéressé, veuillez suivre ce cours. Je recommande également le cours de base Python de Jun Sakai.
Les éléments de chaque bloc sont les suivants.
--Bloquer --previous_hash: valeur de hachage du bloc précédent --nonce: valeur trouvée par l'extraction --transaction: transaction traitée dans le bloc --Timelink: heure à laquelle le bloc a été créé
Tous les blocs de la chaîne sont connectés par previous_hash, donc si vous voulez falsifier un bloc au milieu de la chaîne, vous devez recalculer toutes les valeurs de hachage suivantes pour éviter toute falsification.
L'opération jusqu'à ce qu'un nouveau bloc soit ajouté à la chaîne est la suivante.
class BlockChain(object):
#Créer le premier bloc
def __init__(self):
self.chain = []
self.transaction_pool = []
self.create_block(previous_hash='Initialize')
#Renvoie une valeur de hachage
def hash(self, block):
json_block = json.dumps(block)
return hashlib.sha256(json_block.encode()).hexdigest()
#Créer un bloc basé sur la valeur reçue
def create_block(self, previous_hash=None, nonce=0, transaction=None, timestamp=time.time()):
block = {
'previous_hash': previous_hash,
'nonce': nonce,
'transaction': transaction,
'timestamp': timestamp
}
self.add_block_to_chain(block)
#Ajouter des blocs à la chaîne
def add_block_to_chain(self, block):
self.chain.append(block)
#Trouvez la valeur nonce
def mining(self):
previous_hash = self.hash(self.chain[-1])
nonce = 0
transaction = self.transaction_pool
self.transaction_pool = []
timestamp = time.time()
self.create_block(previous_hash, nonce, transaction, timestamp)
#Transactions de pool
def add_transaction(self, sender_name, reciever_name, value):
transaction = {
'Sender_name': sender_name,
'Reciever_name': reciever_name,
'Value': value
}
self.transaction_pool.append(transaction)
#Sortie de la chaîne dans un format facile à lire
def print_chain(self):
for chain_index, block in enumerate(self.chain):
print(f'{"="*40}Block {chain_index:3}')
if block['transaction'] is None:
print('Initialize')
continue
else:
for key, value in block.items():
if key == 'transaction':
for transaction in value:
print(f'{"transaction":15}:')
for kk, vv in transaction.items():
print(f'\t{kk:15}:{vv}')
else:
print(f'{key:15}:{value}')
if __name__ == '__main__':
print('='*30 + 'Start' + '='*30)
#Créer une instance BlockChain
blockchain = BlockChain()
#Enregistrer une transaction
blockchain.add_transaction(sender_name='Alice', reciever_name='Bob', value=100)
#Enregistrer une transaction
blockchain.add_transaction(sender_name='Alice', reciever_name='Chris', value=1)
#Effectuer du minage (recherche de nonce)
blockchain.mining()
#Ajouter une transaction
blockchain.add_transaction(sender_name='Bob', reciever_name='Dave', value=100)
#Effectuer du minage (recherche de nonce)
blockchain.mining()
#Afficher la blockchain créée
blockchain.print_chain()
========================================Block 0
Initialize
========================================Block 1
previous_hash :54c72dc7390c09a6d2c00037c381057a7bd069e8d9c427585ce31bed16dfd0d8
nonce :0
transaction :
Sender_name :Alice
Reciever_name :Bob
Value :100
transaction :
Sender_name :Alice
Reciever_name :Chris
Value :1
timestamp :1578989130.9111161
========================================Block 2
previous_hash :d4bb210d2e3ad304db53756e87a7513b2fca8672c6e757bef6db3fff8ff26bb1
nonce :0
transaction :
Sender_name :Bob
Reciever_name :Dave
Value :100
timestamp :1578989132.9128711
C'est une blockchain qui n'a pas beaucoup été entendue depuis qu'elle est devenue populaire il y a quelque temps, mais il y a encore plus de cas d'utilisation tels que Sony l'utilisant pour la gestion des droits d'auteur et Microsoft l'utilisant pour l'identification personnelle, alors étudiez-la. Je pense qu'il n'y a pas de perte. À l'avenir, nous prévoyons de mettre en œuvre celui lié à Flask.
Recommended Posts