Eigene Kryptowährung von Grund auf erstellen – Nathan Ang


Klasse Blockchain (Objekt): 
def __init __ (self):
Klasse Block (Objekt):
def __init __ (self):
Klasse Transaktion (Objekt):
def __init __ (self):
Klasse Blockchain (Objekt): 
def __init __ (self):
self.chain = []; #Blockchain ist ein Array von Blöcken
Klasse Block (Objekt):
def __init __ (Selbst, Transaktionen, Zeit, Index):
self.index = index; #Blocknummer
self.transactions = Transaktionen; #Transaktionsdaten
self.time = time; #Zeitblock wurde erstellt
self.prev = ''; #Hash des vorherigen Blocks
self.hash = self.calculateHash (); #Hash of Block
def calculatorHash (self):
hashTransactions = "";
für die Transaktion in self.transactions:
hashTransactions + = transaction.hash;
hashString = str (self.time) + hashTransactions + self.prev + str (self.index) + str (self.nonse);
hashEncoded = json.dumps (hashString, sort_keys = True) .encode ();
return hashlib.sha256 (hashEncoded) .hexdigest ();
Klasse Transaktion (Objekt):
def __init __ (self, sender, reciever, amt):
self.sender = sender;
self.reciever = Empfänger;
self.amt = amt;
self.time = time ();
self.hash = self.calculateHash ();
def calculatorHash (self):
hashString = self.sender + self.reciever + str (self.amt) + str (self.time);
hashEncoded = json.dumps (hashString, sort_keys = True) .encode ();
return hashlib.sha256 (hashEncoded) .hexdigest ();
Klasse Blockchain (Objekt):
...
def getLastBlock (self):
return self.chain[-1];
def addBlock (self, block):
if (len (self.chain)> 0):
block.prev = self.getLastBlock (). hash;
sonst:
block.prev = "none";
self.chain.append (block);
Klasse Blockchain (Objekt):
def __init __ (self):
self.chain = [self.addGenesisBlock()];
self.pendingTransactions = [];
Selbstschwierigkeit = 4;
self.minerRewards = 50;
self.blockSize = 10;
def addTransaction (self, sender, reciever, amt, keyString, senderKey):
keyByte = keyString.encode ("ASCII");
senderKeyByte = senderKey.encode ("ASCII");
#print (type (keyByte), keyByte); key = RSA.import_key (keyByte);
senderKey = RSA.import_key (senderKeyByte);
wenn nicht absender oder nicht empfänger oder nicht amt:
print ("Transaktionsfehler 1");
falsch zurückgeben;
transaction = Transaktion (Absender, Empfänger, amt); transaction.signTransaction (key, senderKey); wenn nicht transaction.isValidTransaction ():
print ("Transaktionsfehler 2");
falsch zurückgeben;
self.pendingTransactions.append (Transaktion);
return len (self.chain) + 1;
Klasse Block (Objekt):
...
def mineBlock (Selbst, Schwierigkeit):
arr = [];
für i in range (0, schwierigkeit):
arr.append (i + 1);

#compute bis zum Beginn des Hash = 0123..Schwierigkeit
arrStr = map (str, arr);
hashPuzzle = '' .join (arrStr);
#print (len (hashPuzzle));
während self.hash[0:difficulty] ! = hashPuzzle:
self.nonse + = 1;
self.hash = self.calculateHash ();
'' '
print ("Nonse:", self.nonse);
print ("Hash-Versuch:", self.hash);
print ("Hash We Want:", hashPuzzle, "...");
drucken("");
#schlaf (0,8);
'' '
drucken("");
print ("Block Mined! Nonse zum Lösen des Arbeitsnachweises:", self.nonse);
return True;

Klasse Blockchain (Objekt):
...
def addTransaction (self, sender, reciever, amt, keyString, senderKey):
keyByte = keyString.encode ("ASCII");
senderKeyByte = senderKey.encode ("ASCII");
key = RSA.import_key (keyByte);
senderKey = RSA.import_key (senderKeyByte);
wenn nicht absender oder nicht empfänger oder nicht amt:
print ("Transaktionsfehler 1");
falsch zurückgeben;
transaction = Transaktion (Absender, Empfänger, amt); transaction.signTransaction (key, senderKey); wenn nicht transaction.isValidTransaction ():
print ("Transaktionsfehler 2");
falsch zurückgeben;
self.pendingTransactions.append (Transaktion);
return len (self.chain) + 1;
def generateKeys (self):
key = RSA.generate (2048)
private_key = key.export_key ()
file_out = open ("private.pem", "wb")
file_out.write (private_key)
public_key = key.publickey (). export_key ()
file_out = open ("receiver.pem", "wb")
file_out.write (public_key)

#print (key.export_key ());
return key.publickey (). export_key (). decode ('ASCII');

Klasse Transaktion (Objekt):
...
def signTransaction (self, key, senderKey):
if (self.hash! = self.calculateHash ()):
print ("Transaktionsmanipulationsfehler");
falsch zurückgeben;
if (str (key.publickey (). export_key ())! = str (senderKey.publickey (). export_key ())):
print ("Transaktionsversuch, von einer anderen Brieftasche signiert zu werden");
falsch zurückgeben;
self.signature = "gemacht";
#print (key.sign (self.hash, ""));
print ("Made Signature!");
return True;
def isValidTransaction (self):
if (self.hash! = self.calculateHash ()):
falsch zurückgeben;
if (self.sender == self.reciever):
falsch zurückgeben;
if (self.sender == "Miner Rewards"):
return True;
wenn nicht self.signature oder len (self.signature) == 0:
print ("Keine Unterschrift!")
falsch zurückgeben;
return True;
Klasse Blockchain (Objekt):
...
def register_node (self, address):
parsedUrl = urlparse (Adresse);
self.nodes.add (parsedUrl.netloc);
Klasse Blockchain (Objekt):
...
def resolveConflicts (self):
Nachbarn = self.nodes;
newChain = None;
maxLength = len (self.chain); für Knoten in Nachbarn:
response = orders.get (f'http: // {node} / chain ');
if response.status_code == 200:
length = response.json ()['length'];
chain = response.json ()['chain'];
if length> maxLength und self.isValidChain ():
maxLength = length;
newChain = chain;
wenn newChain:
self.chain = self.chainJSONdecode (newChain);
print (self.chain);
return True;
falsch zurückgeben;

Werbung: Immobilienmakler HeidelbergMakler Heidelberg

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close