Ich habe den Inhalt der Blockchain im Kurs Udemy grob verstanden und ihn implementiert. Wir implementieren es selbst basierend auf dem Inhalt des Kurses. Jun Sakai, ein aktiver Ingenieur im Silicon Valley, unterrichtet diesen Kurs. Wenn Sie diesen Kurs belegen, können Sie die folgenden Programme erstellen, ohne auf etwas zu achten. Wallet und Proof_of_work, die in diesem Beitrag nicht implementiert sind, sind ebenfalls implementiert. Wenn Sie also interessiert sind, nehmen Sie bitte an diesem Kurs teil. Ich empfehle auch Jun Sakais Python-Grundkurs.
Die Elemente in jedem Block sind wie folgt.
--Block --previous_hash: Hash-Wert des vorherigen Blocks --nonce: Wert, der durch Bergbau gefunden wurde --transaction: Transaktion, die im Block verarbeitet wird --Timelink: Zeitpunkt, zu dem der Block erstellt wurde
Alle Blöcke in der Kette sind durch previous_hash verbunden. Wenn Sie also einen Block in der Mitte der Kette manipulieren möchten, müssen Sie alle nachfolgenden Hash-Werte neu berechnen, um Manipulationen zu verhindern.
Die Operation, bis ein neuer Block zur Kette hinzugefügt wird, ist wie folgt.
class BlockChain(object):
#Erstellen Sie den ersten Block
def __init__(self):
self.chain = []
self.transaction_pool = []
self.create_block(previous_hash='Initialize')
#Gibt einen Hashwert zurück
def hash(self, block):
json_block = json.dumps(block)
return hashlib.sha256(json_block.encode()).hexdigest()
#Erstellen Sie einen Block basierend auf dem empfangenen Wert
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)
#Fügen Sie der Kette Blöcke hinzu
def add_block_to_chain(self, block):
self.chain.append(block)
#Finden Sie den Nonce-Wert
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)
#Pool-Transaktionen
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)
#Geben Sie die Kette in einem einfach zu lesenden Format aus
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)
#Erstellen Sie eine BlockChain-Instanz
blockchain = BlockChain()
#Registrieren Sie eine Transaktion
blockchain.add_transaction(sender_name='Alice', reciever_name='Bob', value=100)
#Registrieren Sie eine Transaktion
blockchain.add_transaction(sender_name='Alice', reciever_name='Chris', value=1)
#Mining durchführen (nach Nonce suchen)
blockchain.mining()
#Fügen Sie eine Transaktion hinzu
blockchain.add_transaction(sender_name='Bob', reciever_name='Dave', value=100)
#Mining durchführen (nach Nonce suchen)
blockchain.mining()
#Zeigen Sie die erstellte Blockchain an
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
Es ist eine Blockchain, die seit ihrer Popularität vor einiger Zeit nicht mehr viel gehört hat, aber es gibt immer noch weitere Anwendungsfälle wie Sony, das sie für die Verwaltung des Urheberrechts verwendet, und Microsoft, das sie für die persönliche Identifizierung verwendet. Studieren Sie sie also. Ich denke, es gibt keinen Verlust. In Zukunft planen wir die Implementierung der mit Flask verknüpften.
Recommended Posts