Kako izgraditi blockchain u Pythonu?

Ako želite naučiti kako graditi blockchain, onda ste došli na pravo mjesto. Zaronimo duboko kako bismo saznali kako možete izgraditi blockchain u pythonu.

Postoje tone članaka oko blockchaina, ali ne svi oni govore o izgradnji blockchaina od nule. Kao programer, teorije su važne, ali također morate stvoriti blockchain da biste u potpunosti razumjeli koncept koji stoji iza njega.

Osnovna ideja koja stoji iza blockchaina je njegova decentralizirana priroda. Fascinirat će vas činjenica kako sve to funkcionira iznutra. Blockchain možda zvuči jednostavno, ali iznutra postoji puno protokola i algoritama koji to čine. Koristit ćemo Python za stvaranje blockchaina od nule.

Također možete spremiti članak i označiti ga kao: “Kako izgraditi naš blockchain.” Vjeruj mi; članak će vam dugoročno pomoći.

Nikad niste čuli za blockchain? Zatim pogledajte besplatni tečaj 101Blockchain. Ako želite napredovati u svojoj karijeri, provjerite Certified Enterprise Blockchain tečaj gdje ćete naučiti kako funkcionira blockchain poduzeća. Započnimo.

Jeste li početnik u Blockchainu? Upišite se na Blockchain besplatni tečaj i započnite svoje Blockchain putovanje odmah.

Kako izraditi blockchain

Najbolji način da bilo što naučite je učiti radeći. Da bismo bili sigurni da ste na istoj stranici kao i ja, prvo provjerimo zahtjeve. Također ćemo ukratko opisati blockchain tako da smo oboje na istoj stranici.

Kako izgraditi blockchain u Pythonu

Zahtjev

Osnovni zahtjev za pridržavanje vodiča je znati kodirati. Ako nikada u životu niste kodirali, ovaj vodič nije za vas. Preporučujem provjeriti razne tečajeve početne razine koji su dostupni na mreži. Preporučujem EdX, Udacity i Courseru za najbolje iskustvo učenja.

Već ste programer? Tada biste trebali znati o osnovnom Pythonu. Također, pomoći će vam da slijedite upute “Kako izraditi blockchain”.

Pročitajte sada: Krajnji vodič za kvorum Blockchain

Stvorili smo tutorial tako da ga svatko može slijediti. Dakle, ako ne znate i želite naučiti kako izraditi blockchain od nule, slobodno to učinite!

Ako ne poznajete Python, ne brinite jer ga je lako pokupiti. Pogledajte Python dokumentacija započeti.

Za poduku ćemo koristiti Python 3.6+. Ako se odlučite koristiti druge verzije Pythona, tada ćete možda morati provesti više istraživanja kako bi kôd funkcionirao. Za potrebe tutorijala preporučujem instaliranje verzije koju koristim.

Na kraju, trebali biste znati i o HTTP-u – protokolu koji se koristi za komunikaciju dviju strana na Internetu.

Instaliranje Pythona pomoću pipa

Morate instalirati Python pomoću pipa. Također morate instalirati prekrasne knjižnice zahtjeva i tikvica. Da biste to učinili, jednostavno pokrenite naredbu u nastavku.

$ pip install Flask == 0.12.2 zahtjeva == 2.18.4

Ako koristite Windows okruženje, možete izravno otići na python.org da biste preuzeli najnoviju verziju Pythona.

Što se mene tiče, preuzeo sam Python 3.8.1 – najnoviju verziju u vrijeme pisanja vodiča.

Za IDE, više volim koristiti PyCharm. Za lekcije koristim izdanje Python Community. Možete koristiti bilo koji IDE po vašem izboru. Druga izvrsna alternativa je Visual Studio Code – besplatno integrirano razvojno okruženje otvorenog koda.

Posljednji alat koji će vam trebati je Poštar – HTTP klijent. Možete koristiti i curL.

Također preporučujem instaliranje virtualnog okruženja kako biste stvorili potpuno drugačije okruženje za svoj razvoj. Možete slijediti ovaj vodič kako bi ga pravilno postavili.

Blockchain Revisited

Prije nego što krenemo u izgradnju blockchaina, moramo osvježiti svoju ideju o blockchainu. To će nam pomoći da ostanemo na istoj stranici.

Blockchain je tehnologija raspodijeljene knjige gdje vršnjaci mogu sudjelovati, komunicirati i izvršavati transakcije bez potrebe za centraliziranim entitetom. Svaki vršnjak ima kopiju glavne knjige, što hakerima onemogućava prijevare u sustavu. Ključne značajke blockchaina uključuju transparentnost, nepromjenjivost i sigurnost. Koristi napredne algoritme za kriptovalute kako bi osigurao sigurnost podataka. Također, za postizanje konsenzusa, blockchain mreža će koristiti konsenzusne algoritme kao što su Proof-of-Work, Proof-of-Stake itd..

Pročitajte i: Blockchain za početnike: Vodič za početak rada

Početak rada s izgradnjom blockchaina

Sa svim preduvjetnim instalacijama, spremni smo za početak rada s našim uputstvom “Kako izgraditi blokchain”.

Za početak morate stvoriti datoteku blockchain.py.

1. Izrada blockchaina

Prvi korak je stvaranje funkcionalnog blockchain rješenja. U početku moramo stvoriti klasu Blockchain. Tamo ćemo stvoriti konstruktor koji će inicirati lanac i popis transakcija. Popis lanaca pohranit će naš blockchain, dok će transakcije biti pohranjene u polju current_transacations.

def __init __ (self): self.chain = [] self.current_transaction = []

Dalje, moramo stvoriti funkciju new_block koja će se koristiti za stvaranje novih blokova, a zatim ih dodati u postojeći lanac. Kôd funkcije new_block je sljedeći:

def new_block (self): # Ova funkcija stvara nove blokove, a zatim dodaje postojećem lančanom prolazu

Metoda new_transcaction stvorit će novu transakciju, a zatim dodati transakciju na već postojeći popis transakcija.

def new_transaction (self): # Ova funkcija dodaje novu transakciju već postojećem prijenosu transakcija Također imamo i hash funkciju koja se koristi za stvaranje hasha za blok. @staticmethod def hash (block): # Koristi se za raspršivanje bloka

Posljednja funkcija koju ćemo stvoriti last_block. Koristi se za pozivanje posljednjeg bloka u lancu.

Ovdje također možemo stvoriti još tri funkcije.

  • register_node () → Da biste registrirali novi čvor i dodali ga u mrežu
  • valid_proof () → Osigurati kada problem koji je poslao lanac riješi
  • valid_chain () → Ovo će provjeriti jesu li sljedeći blokovi u lancu valjani ili ne.

Način za blockchain.py izgleda kao u nastavku.

klasa Blockchain (objekt): def __init __ (self): self.chain = [] self.current_transactions = [] def new_block (self): # Ova funkcija stvara nove blokove, a zatim dodaje postojećem lančanom prijelazu def new_transaction (self): # Ova funkcija dodaje novu transakciju već postojećim prolazima transakcija @staticmethod def hash (blok): # Koristi se za raspršivanje bloka @property def last_block (self): # Poziva i vraća zadnji blok lančanog prolaza

Klasa Blockchain upravlja cijelim lancem. Definicije definirane u klasi upravljaju različitim akcijama unutar blockchaina.

Prođimo kroz svaku od dolje navedenih metoda.

Pročitajte sada: Što je blockchain otapanje: Uvod u rješenje za skaliranje blockchaina

Struktura bloka

Blok sadrži vitalne informacije o transakcijama i lancima. Bilo koji blok na lancu sadržavat će sljedeće podatke

  • indeks
  • vremenska oznaka u Unix vremenu
  • popis transakcija
  • dokaz
  • Hash prethodnog bloka

Većina informacija unutar bloka su samorazumljive. Ovdje su dvije ključne varijable previous_hash, koji sadrži hash vrijednost prethodnog bloka. To je važno jer osigurava da blockchain bude nepromjenjiv i nijedan zlonamjerni akter ne može ažurirati, izbrisati ili dodati bilo koji podatak u lanac.

Pročitajte sada: Zašto će Blockchain promijeniti svijet?

Dodavanje transakcije u blok

Uz razumijevanje strukture bloka, naučimo sada kako bloku dodati transakciju. Kôd je kao u nastavku.

def new_transaction (self): # Ova funkcija dodaje novu transakciju već postojećim transakcijama """To će stvoriti novu transakciju koja će biti poslana u sljedeći blok. Sadržat će tri varijable, uključujući pošiljatelja, primatelja i iznos """ self.current_transactions.append ({‘pošiljatelj’: pošiljatelj, ‘primatelj’: primatelj ‘iznos’: iznos,}) return self.last_block [‘indeks’] + 1 Kao što vidite, on jednostavno dodaje popis trenutnih_transakcija s objekt koji sadrži tri varijable → pošiljatelj, primatelj, iznos.

Jednom kad je zbrajanje završeno, metoda zatim šalje indeks bloka lancu. To je sljedeći blok koji će biti miniran.

Stvaranje novih blokova

Prije nego počnemo stvarati nove blokove, moramo stvoriti blok geneze. Da bismo to učinili, trebamo upotrijebiti jednostavan redak koda kao u nastavku.

self.new_block (previous_hash = 1, proof = 100)

Ovaj bi redak trebao biti dodan u vašu klasu Blockchain.

Za metodu new_block () trebate poslati dvije varijable kao njene parametre. Uključuje dokaz i previous_hash.

Sada, pogledajmo metodu new_block () u nastavku.

def new_block (self, proof, previous_hash = None): # Ova funkcija stvara nove blokove, a zatim dodaje postojećem lancu """Ova metoda sadržavat će dva parametarska dokaza, prethodni hash""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash: previous_hash ili self.hash (self.chain [-1]),}

# Postavite trenutni popis transakcija na prazan.

   self.current_transactions = [] self.chain.append (block) povratni blok

Objasnimo kod novog_bloka. Izrađujemo popis blokova koji sadrži tri važna parametra. Nakon što su definirani, tada također napišemo kod za poništavanje popisa current_transaction, a zatim dodamo blok lancu. Metoda new_block, kada se pozove, vraća blok.

Pročitajte sada: Vodič za početnike: Što je Ethereum Classic?

Definirajmo i metodu last_block u nastavku.

@property

def last_block (self):

# Poziva i vraća zadnji blok lanca

vrati self.chain [-1]

Također, kod metode hash () je kao u nastavku:

def hash (blok): # Koristi se za raspršivanje bloka """Sljedeći kôd stvorit će hash bloka SHA-256 i također osigurati da je rječnik uređen""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () Ako do sada kombinirate sav kôd, imat ćemo sljedeći blockchain.py. Provjerite dolje.

klasa Blockchain (objekt): def __init __ (self): self.chain = [] self.current_transactions = [] self.new_block (previous_hash = 1, proof = 100) def new_block (self, proof, previous_hash = None): #This funkcija stvara nove blokove, a zatim dodaje postojećem lancu """Ova metoda sadržavat će dva parametarska dokaza, prethodni hash""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash: previous_hash ili self.hash (self.chain [-1]),} # Set trenutni popis transakcija isprazniti. self.current_transaction = [] self.chain.append (block) return block def new_transaction (self): # Ova funkcija dodaje novu transakciju već postojećim transakcijama """To će stvoriti novu transakciju koja će biti poslana u sljedeći blok. Sadržat će tri varijable, uključujući pošiljatelja, primatelja i iznos """ self.current_transactions.append ({‘pošiljatelj’: pošiljatelj, ‘primatelj’: primatelj, ‘iznos’: iznos,}) return self.last_block [‘indeks’] + 1 @staticmethod def hash (blok): # Koristi se za raspršivanje blok """Sljedeći kôd stvorit će hash bloka SHA-256 i također osigurati da je rječnik uređen""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () @property def last_block (self): # Poziva i vraća zadnji blok lanca return self.chain [ -1]

Dokaz o provedbi posla

Naš sljedeći korak u izgradnji blockchain.py je implementacija Proof-of-Work.

Pa, što je dokaz o radu? To je metoda konsenzusa koja se koristi za dodavanje novih blokova u lanac. Pred rudara predstavlja izazov, a nakon što rudar riješi problem, blok se zatim provjerava. Rudar zauzvrat dobiva nagradu na temelju složenosti problema.

Bitcoinov dokaz o radu poznat je pod nazivom Hashcash. Osigurava da konsenzus bitcoin mreže funkcionira kako je predviđeno.

Pročitajte i: Konsenzusni algoritmi: korijen tehnologije Blockchain

Definirajmo metodu proof_of_work (). Metoda će biti dio klase Blockchain.

def proof_of_work (self, last_proof): """Na ovoj je metodi implementiran algoritam konsenzusa. Potrebna su dva parametra, uključujući self i last_proof""" proof = 0 dok je self.valid_proof (last_proof, proof) False: proof + = 1 return proof @staticmethod def valid_proof (last_proof, proof): """Ova metoda potvrđuje blok""" guess = f ‘{last_proof} {proof}’. encode () guess_hash = hashlib.sha256 (guess) .hexigest () return guess_hash [: 4] == "0000"

Prva metoda proof_of_work je jednostavna; jednostavno je postavio dokaz na 0, a zatim pokrenuo while petlju za pokretanje metode valid_proof. Ako je Lažno, dodajte jedno u dokaz.

Teškoću raspršivanja možete povećati dodavanjem dodatnih nula.

To nas vodi do kraja našeg Blockchain.py. Naš kod stoji kao u nastavku.

klasa Blockchain (objekt): def __init __ (self): self.chain = [] self.current_transactions = [] self.new_block (previous_hash = 1, proof = 100) def proof_of_work (self, last_ last): """Na ovoj je metodi implementiran algoritam konsenzusa. Potrebna su dva parametra, uključujući self i last_proof""" proof = 0 dok je self.valid_proof (last_proof, proof) False: proof + = 1 return proof @staticmethod def valid_proof (last_proof, proof): """Ova metoda potvrđuje blok""" guess = f ‘{last_proof} {proof}’. encode () guess_hash = hashlib.sha256 (guess) .hexigest () return guess_hash [: 4] == "0000" def new_block (self, proof, previous_hash = None): # Ova funkcija stvara nove blokove, a zatim dodaje postojećem lancu """Ova metoda sadržavat će dva parametarska dokaza, prethodni hash""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash: previous_hash ili self.hash (self.chain [-1]),} # Set trenutni popis transakcija isprazniti. self.current_transaction = [] self.chain.append (block) return block def new_transaction (self): # Ova funkcija dodaje novu transakciju već postojećim transakcijama """To će stvoriti novu transakciju koja će biti poslana u sljedeći blok. Sadržat će tri varijable, uključujući pošiljatelja, primatelja i iznos """ self.current_transactions.append ({‘pošiljatelj’: pošiljatelj, ‘primatelj’: primatelj, ‘iznos’: iznos,})

vrati self.last_block [‘indeks’] + 1

@staticmethod

def hash (blok):

#Upotrebljava se za raspršivanje bloka

“” “Sljedeći kôd stvorit će hash bloka SHA-256 i također osigurati da je rječnik uređen” “”

block_string = json.dumps (block, sort_keys = True) .encode ()

vrati hashlib.sha256 (niz_blokova) .hexdigest ()

@property

def last_block (self):

# Poziva i vraća zadnji blok lanca

vrati self.chain [-1]

2. API integracija

Izvrsno, kreiramo blockchain koji radi! Sada, da bismo ga učinkovito koristili, moramo stvoriti API (sučelje za programiranje aplikacija).

Da bismo to učinili, koristit ćemo popularni Python Framework: Flask.

Tikvica je mikrookvir, što znači da je lagana i možete dodati potrebne knjižnice. Omogućuje vam i lako stvaranje krajnje točke funkcije Python.

Da bismo stvorili API-je, prvo moramo osigurati da naš blockchain može prihvaćati zahtjeve putem HTTP-a. Da bismo to učinili, moramo stvoriti više metoda.

Sada ćemo izmijeniti blockchain.py.

# Izrada čvora aplikacije app = Flask (__ name__) node_identifier = str (uuid4 ()). Replace (‘-‘, ”) # Inicijalizacija blockchain blockchain = Blockchain () @ app.route (‘/ mine’, methods = [ ‘GET’]) def mine (): return "Iskopavanje novog bloka" @ app.route (‘/ transakcije / novo’, metode = [‘POST’]) def new_transaction (): return "Dodavanje nove transakcije" @ app.router (‘/ chain’, methods = [‘GET’]) def full_chain (): response = {‘chain’: blockchain.chain, ‘length’: len (blockchain.chain)} return jsonify (response) , 200 ako je __name__ == ‘__main__’: app.run (host ="0,0,0,0", priključak = 5000)

Kôd je sam po sebi razumljiv. Prvo radimo inicijaciju čvora. Dalje, stvaramo slučajni čvor. Nakon završetka inicijaliziramo klasu Blockchain. Kad završimo, trebamo stvoriti tri krajnje točke kao što je prikazano u nastavku.

  • / moja krajnja točka
  • / transakcije / nova krajnja točka
  • / krajnja točka lanca

Konačno, poslužitelj pokrećemo na port 5000.

Aplikacija je sada gotovo kreirana. Sve što trebamo je stvoriti metodu klase transakcija.

@ app.route (‘/ transakcije / novo’, metode = [‘POST’]) def new_transaction (): values ​​= request.get_json () # Provjera postoje li potrebni podaci ili nisu potrebni = [‘sender’, ‘ primatelj ‘,’ iznos ‘] ako nije sve (k u vrijednostima za k u potrebnom): povratak “Nedostajuće vrijednosti”, 400 # stvaranje novog indeksa transakcije = blockchain.new_transaction (vrijednosti [‘ pošiljatelj ‘], vrijednosti [‘ primatelj ‘ , vrijednosti [‘iznos’]]) response = {‘message’: f’Transakcija je predviđena za dodavanje u blok br. {index} ‘} return jsonify (odgovor), 201

Pročitajte i: Evo što trebate znati o blockchain dokazima o radu

Krajnja točka rudarstva

Posljednja krajnja točka koju ćemo stvoriti je krajnja točka rudarstva. Da bismo to učinili, moramo biti sigurni da čini sljedeće tri stvari.

  • Dokaz o izračunu rada
  • Kovati novi blockchain, a zatim ga dodati u lanac
  • Nagradite rudara za njegov rad

@ app.route (‘/ mine’, methods = [‘GET’]) def mine (): """Ovdje radimo dokaz rada algoritma""" last_block = blockchain.last_block last_proof = last_block [‘proof’] proof = blockchain.proof_of_work (last_proof) # nagrađivanje rudara za njegov doprinos. 0 navodi da je minirana nova kovanica blockchain.new_transaction (sender ="0", primatelj = identifikator čvora, iznos = 1,) # sada stvorite novi blok i dodajte ga u lanac previous_hash = blockchain.hash (last_block) block = blockchain.new_block (proof, previous_hash) response = {‘message’: ‘Novi blok je falsificiran ‘,’ index ‘: block [‘ index ‘],’ transakcije ‘: block [‘ transakcije ‘],’ proof ‘: block [‘ proof ‘],’ previous_hash ‘: block [‘ previous_hash ‘]} return jsonify (odgovor), 200

Pročitajte sada: Vodič za početnike: Što je AION? Svjetska prva blokchain mreža treće generacije

3. Blockchain interakcija

Posljednji je korak interakcija s blockchainom. Koristit ćemo Postman za interakciju s blockchain mrežom pomoću API-ja koji smo upravo stvorili.

Pokrenite donji kod na Python konzoli

python blockchain.py

Zaključak

To nas dovodi do kraja našeg Kako izraditi blockchain. Nadam se da će vam gornji koraci i kodovi pomoći da izgradite Blockchain u Pythonu. Dakle, ako ste novak i težite izgradnji karijere u Blockchainu, predlažemo vam da započnete svoju blockchain karijeru s našim besplatnim tečajem o osnovama Blockchaina. Odaberite nas za partnera za učenje i imat ćemo vas dok ne dobijete posao iz snova.

Pa, što mislite o blockchainu i njegovoj provedbi? Komentirajte u nastavku i javite nam.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
map