Dacă doriți să aflați cum să construiți un blockchain, atunci ați ajuns la locul potrivit. Să ne scufundăm adânc pentru a afla cum puteți construi un blockchain în python.

Există tone de articole în jurul blockchain-ului, dar nu toate vorbesc despre construirea unui blockchain de la zero. Ca dezvoltator, teoriile sunt importante, dar trebuie să creați și un blockchain pentru a înțelege complet conceptul din spatele acestuia.

Ideea de bază din spatele blockchain-urilor este natura descentralizată. Veți fi fascinat de modul în care funcționează totul în interior. Blockchain ar putea suna simplu, dar în interior există o mulțime de protocoale și algoritmi care fac ca acest lucru să se întâmple. Vom folosi Python pentru a crea un blockchain de la zero.

De asemenea, puteți salva articolul și îl puteți marca ca „Cum să construim blockchain-ul nostru”. Crede-ma; articolul vă va ajuta pe termen lung.

Nu ați auzit niciodată de blockchain? Apoi, verificați cursul gratuit al 101Blockchain. Dacă doriți să vă avansați în carieră, consultați cursul certificat Enterprise Blockchain, unde aflați cum funcționează blockchain-ul întreprinderii Să începem.

Ești începător în Blockchain? Înscrieți-vă la cursul Blockchain Free și începeți călătoria dvs. Blockchain acum.

Cum să construiești un blockchain

Cel mai bun mod de a învăța orice este să înveți făcând. Pentru a ne asigura că vă aflați pe aceeași pagină cu mine, să verificăm mai întâi cerințele. De asemenea, vom descrie pe scurt blockchain, astfel încât amândoi să fim pe aceeași pagină.

Cum să construiești un blockchain în Python

Cerinţă

Cerința de bază pentru a urma ghidul este să știi cum să codezi. Dacă nu ai codificat niciodată în viața ta, atunci acest ghid nu este pentru tine. Vă recomand să verificați diferitele cursuri la nivel de începători care sunt disponibile online. Recomand EdX, Udacity și Coursera pentru cea mai bună experiență de învățare.

Sunteți deja coder? Apoi, ar trebui să știți despre Python de bază. De asemenea, vă va ajuta să urmați tutorialul „Cum să construiți un blockchain”.

Citiți acum: Ghidul Quorum Blockchain Ultimate

Am creat tutorialul, astfel încât oricine să poată urma. Deci, dacă nu știți și doriți să învățați cum să construiți un blockchain de la zero, sunteți binevenit să faceți acest lucru!

Dacă nu cunoașteți Python, nu vă faceți griji, deoarece este ușor de ridicat. Verificați Documentare Python pentru a incepe.

Vom folosi Python 3.6+ pentru tutorial. Dacă decideți să utilizați alte versiuni de Python, atunci ar trebui să faceți mai multe cercetări pentru ca codul să funcționeze. În scopuri tutoriale, vă recomand să instalați versiunea pe care o folosesc.

În cele din urmă, ar trebui să știți și despre HTTP – protocolul care este utilizat pentru a comunica între două părți pe internet.

Instalarea Python folosind pip

Trebuie să instalați Python folosind pip. De asemenea, trebuie să instalați cereri minunate și o bibliotecă Flask. Pentru a face acest lucru, pur și simplu rulați comanda de mai jos.

$ pip install Flask == 0.12.2 solicitări == 2.18.4

Dacă utilizați mediul Windows, puteți accesa direct python.org pentru a descărca cea mai recentă versiune de Python.

În ceea ce mă privește, am descărcat Python 3.8.1 – cea mai recentă versiune în momentul scrierii tutorialului.

Pentru IDE, prefer să folosesc PyCharm. Folosesc ediția Python Community pentru tutorial. Sunteți liber să utilizați orice IDE la alegere. O altă alternativă excelentă este Visual Studio Code – un mediu de dezvoltare integrat gratuit, open-source.

Ultimul instrument de care aveți nevoie este Postman – un client HTTP. Alternativ, puteți utiliza și cURL.

De asemenea, vă recomand să instalați un mediu virtual pentru a crea un mediu complet diferit pentru dezvoltarea dvs. Puteți urmări acest ghid pentru a-l configura corect.

Blockchain revizuit

Înainte de a merge și a construi blockchain-ul, trebuie să ne reîmprospătăm ideea de blockchain. Acest lucru ne va ajuta să rămânem pe aceeași pagină.

Blockchain este o tehnologie de registru distribuit în care colegii pot participa, interacționa și executa tranzacții fără a fi nevoie de o entitate centralizată. Fiecare coleg are o copie a registrului, ceea ce face imposibil ca hackerii să facă fraude în sistem. Caracteristicile cheie ale blockchain-ului includ transparența, imuabilitatea și securitatea. Utilizează algoritmi avansați de criptomonedă pentru a asigura securitatea datelor. De asemenea, pentru a ajunge la consens, o rețea blockchain va utiliza algoritmi de consens, cum ar fi Dovada muncii, Dovada mizei și așa mai departe.

De asemenea, citiți: Blockchain pentru începători: Ghid de inițiere

Noțiuni introductive despre construirea unui blockchain

Cu toate instalările preliminare realizate, suntem acum gata să începem cu tutorialul nostru, „Cum să construiești un blockchain”.

Pentru a începe, trebuie să creați un fișier blockchain.py.

1. Crearea Blockchain

Primul pas este de a face o soluție funcțională blockchain. La început, trebuie să creăm o clasă Blockchain. Acolo vom crea un constructor care va iniția lanțul și lista tranzacțiilor. Lista lanțului va stoca blockchain-ul nostru, în timp ce tranzacțiile vor fi stocate în matricea current_transacations.

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

Apoi, trebuie să creăm o funcție new_block care va fi utilizată pentru a crea noi blocuri și apoi să le adăugăm în lanțul existent. Codul pentru funcția new_block este după cum urmează:

def new_block (self): # Această funcție creează blocuri noi și apoi se adaugă la trecerea în lanț existentă

Metoda new_transcaction va crea o nouă tranzacție și apoi va adăuga tranzacția la lista de tranzacții deja existentă.

def new_transaction (self): #Această funcție adaugă o nouă tranzacție la trecerea tranzacțiilor deja existente Avem, de asemenea, o funcție hash care este utilizată pentru a crea hash-ul pentru un bloc. @staticmethod def hash (bloc): #Utilizat pentru hashing un bloc

Ultima funcție pe care o vom crea last_block. Se folosește pentru a apela ultimul bloc din lanț.

Putem crea și alte trei funcții aici.

  • register_node () → Pentru a înregistra un nou nod și a-l adăuga la rețea
  • valid_proof () → Se va asigura că un bloc trimis în lanț rezolvă problema
  • valid_chain () → Aceasta va verifica dacă blocurile ulterioare din lanț sunt valabile sau nu.

Planul pentru blockchain.py arată ca mai jos.

clasă Blockchain (obiect): def __init __ (self): self.chain = [] self.current_transactions = [] def new_block (self): # Această funcție creează blocuri noi și apoi adaugă la trecerea în lanț existentă def new_transaction (self): # Această funcție adaugă o nouă tranzacție tranzacțiilor deja existente @staticmethod def hash (bloc): #Utilizat pentru hashing un bloc @property def last_block (self): # Apelează și returnează ultimul bloc al trecerii în lanț

Clasa Blockchain administrează întregul lanț. Definițiile definite în cadrul clasei gestionează diferitele acțiuni din cadrul blockchain-ului.

Să parcurgem fiecare dintre metodele de mai jos.

Citiți acum: Ce este distribuirea blockchain-ului: o introducere într-o soluție de scalare blockchain

Structura unui bloc

Un bloc conține informații vitale despre tranzacții și lanțuri. Orice bloc de pe lanț va conține următoarele informații

  • index
  • timestamp în timpul Unix
  • lista tranzacțiilor
  • dovada
  • Hash bloc anterior

Majoritatea informațiilor din cadrul blocului se explică de la sine. Aici, cele două variabile cruciale sunt previous_hash, care conține valoarea hash a blocului anterior. Acest lucru este important deoarece asigură că blockchain-ul este imuabil și niciun actor rău intenționat nu poate actualiza, șterge sau adăuga date în lanț.

Citiți acum: De ce Blockchain va schimba lumea?

Adăugarea tranzacției la un bloc

Cu structura blocului înțeleasă, să învățăm acum cum să adăugăm o tranzacție la bloc. Codul pentru acesta este cel de mai jos.

def new_transaction (self): #Această funcție adaugă o nouă tranzacție tranzacțiilor deja existente """Aceasta va crea o nouă tranzacție care va fi trimisă la următorul bloc. Acesta va conține trei variabile, inclusiv expeditor, destinatar și sumă """ self.current_transactions.append ({‘sender’: sender, ‘recipient’: recipient ‘amount’: amount,}) return self.last_block [‘index’] + 1 După cum puteți vedea, adaugă pur și simplu lista current_transaction cu un obiect care conține trei variabile → expeditor, destinatar, sumă.

Odată adăugată, metoda trimite apoi indexul blocului în lanț. Este următorul bloc care va fi exploatat.

Crearea de blocuri noi

Înainte de a începe să creăm blocuri noi, trebuie să creăm blocul genezei. Pentru a face acest lucru, trebuie să folosim o linie simplă de cod, ca mai jos.

self.new_block (previous_hash = 1, dovadă = 100)

Această linie ar trebui adăugată la clasa dvs. Blockchain.

Pentru metoda new_block (), trebuie să trimiteți două variabile ca parametri ai acesteia. Include dovada și previous_hash.

Acum, să aruncăm o privire la metoda new_block () de mai jos.

def new_block (self, proof, previous_hash = None): # Această funcție creează blocuri noi și apoi se adaugă lanțului existent """Această metodă va conține doi parametri, hash anterior""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash: previous_hash sau self.hash (self.chain [-1]),}

# Setați lista de tranzacții curentă la gol.

   self.current_transactions = [] self.chain.append (block) return block

Să explicăm codul new_block. Creăm o listă de blocuri care conține cei trei parametri importanți. Odată ce acestea sunt definite, scriem și codul pentru a reseta lista de tranzacții curente și apoi adăugăm blocul la lanț. Metoda new_block, când este apelată, returnează blocul.

Citiți acum: Ghid pentru începători: Ce este Ethereum Classic?

Să definim și metoda last_block de mai jos.

@proprietate

def last_block (self):

# Apelează și returnează ultimul bloc al lanțului

return self.chain [-1]

De asemenea, codul pentru metoda hash () este după cum urmează:

def hash (bloc): # Folosit pentru hashing un bloc """Codul următor va crea un hash bloc SHA-256 și va asigura, de asemenea, că dicționarul este comandat""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () Dacă combinați tot codul până acum, vom avea următorul blockchain.py. Verificați-l mai jos.

clasă Blockchain (obiect): 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 funcția creează blocuri noi și apoi se adaugă la lanțul existent """Această metodă va conține doi parametri, hash anterior""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash: previous_hash sau self.hash (self.chain [-1]),} # Set lista de tranzacții curentă să fie golită. self.current_transactions = [] self.chain.append (block) return block def new_transaction (self): #Această funcție adaugă o nouă tranzacție tranzacțiilor deja existente """Aceasta va crea o nouă tranzacție care va fi trimisă la următorul bloc. Acesta va conține trei variabile, inclusiv expeditor, destinatar și sumă """ self.current_transactions.append ({‘sender’: sender, ‘recipient’: recipient, ‘amount’: amount,}) return self.last_block [‘index’] + 1 @staticmethod def hash (block): #Used for hashing un bloc """Codul următor va crea un hash bloc SHA-256 și va asigura, de asemenea, că dicționarul este comandat""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () @property def last_block (self): # Apeluri și returnează ultimul bloc al lanțului returnează self.chain [ -1]

Dovada implementării muncii

Următorul nostru pas în construirea blockchain.py este implementarea dovezii de lucru.

Deci, ce este dovada muncii? Este o metodă de consens care este utilizată pentru a adăuga noi blocuri în lanț. Pune o provocare pentru miner și, odată ce minerul rezolvă problema, blocul este apoi verificat. În schimb, minerul primește o recompensă pe baza complexității problemei.

Dovada muncii Bitcoin este cunoscută sub numele de Hashcash. Se asigură că consensul rețelei bitcoin funcționează conform intenției.

Citește și: Algoritmi de consens: rădăcina tehnologiei Blockchain

Să definim metoda proof_of_work (). Metoda va face parte din clasa Blockchain.

def proof_of_work (self, last_proof): """În această metodă este implementat algoritmul de consens. Este nevoie de doi parametri, inclusiv auto și last_proof""" dovadă = 0 în timp ce self.valid_proof (last_proof, proof) este False: proof + = 1 return return @staticmethod def valid_proof (last_proof, proof): """Această metodă validează blocul""" guess = f ‘{last_proof} {proof}’. encode () guess_hash = hashlib.sha256 (guess) .hexigest () return guess_hash [: 4] == "0000"

Prima metodă proof_of_work este simplă; pur și simplu setează dovada la 0 și apoi rulează o buclă while pentru a rula metoda valid_proof. Dacă este fals, adăugați una la dovadă.

Puteți crește dificultatea hashului adăugând mai multe zerouri.

Acest lucru ne conduce la sfârșitul Blockchain.py. Codul nostru este la fel ca mai jos.

clasă Blockchain (obiect): def __init __ (self): self.chain = [] self.current_transactions = [] self.new_block (previous_hash = 1, proof = 100) def proof_of_work (self, last_proof): """În această metodă este implementat algoritmul de consens. Este nevoie de doi parametri, inclusiv auto și last_proof""" dovadă = 0 în timp ce self.valid_proof (last_proof, proof) este False: proof + = 1 return return @staticmethod def valid_proof (last_proof, proof): """Această metodă validează blocul""" 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): # Această funcție creează blocuri noi și apoi se adaugă lanțului existent """Această metodă va conține doi parametri, hash anterior""" block = {‘index’: len (self.chain) + 1, ‘timestamp’: time (), ‘proof’: proof, previous_hash: previous_hash sau self.hash (self.chain [-1]),} # Set lista de tranzacții curentă să fie golită. self.current_transactions = [] self.chain.append (block) return block def new_transaction (self): #Această funcție adaugă o nouă tranzacție tranzacțiilor deja existente """Aceasta va crea o nouă tranzacție care va fi trimisă la următorul bloc. Acesta va conține trei variabile, inclusiv expeditor, destinatar și sumă """ self.current_transactions.append ({‘sender’: sender, ‘recipient’: recipient, ‘amount’: amount,})

returnează self.last_block [‘index’] + 1

@staticmethod

hash def (bloc):

# Folosit pentru hashing un bloc

„” ”Codul următor va crea un hash bloc SHA-256 și va asigura, de asemenea, că dicționarul este comandat” ””

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

returnează hashlib.sha256 (block_string) .hexdigest ()

@proprietate

def last_block (self):

# Apelează și returnează ultimul bloc al lanțului

return self.chain [-1]

2. Integrare API

Super, creăm un blockchain care funcționează! Acum, pentru a-l utiliza eficient, trebuie să creăm un API (Interfață de programare a aplicațiilor).

Pentru a face acest lucru, vom folosi popularul Python Framework: Flask.

Flask este un micro-cadru, ceea ce înseamnă că este ușor și puteți adăuga bibliotecile de care aveți nevoie. De asemenea, vă permite să creați cu ușurință punctul final al funcției Python.

Pentru a crea API-uri, trebuie mai întâi să ne asigurăm că blockchain-ul nostru poate accepta cereri prin HTTP. Pentru a face acest lucru, trebuie să creăm mai multe metode.

Acum, vom modifica blockchain.py.

# Crearea nodului aplicației app = Flask (__ name__) node_identifier = str (uuid4 ()). Replace (‘-‘, ”) # Initializing blockchain blockchain = Blockchain () @ app.route (‘/ mine’, methods = [ ‘GET’]) def mine (): return "Minarea unui bloc nou" @ app.route (‘/ transactions / new’, methods = [‘POST’]) def new_transaction (): return "Adăugarea unei noi tranzacții" @ app.router (‘/ chain’, methods = [‘GET’]) def full_chain (): response = {‘chain’: blockchain.chain, ‘length’: len (blockchain.chain)} return jsonify (răspuns) , 200 if __name__ == ‘__main__’: app.run (host ="0.0.0.0", port = 5000)

Codul este auto-explicativ în cea mai mare parte. Mai întâi facem o inițiere a nodului. Apoi, creăm un nod aleatoriu. Odată terminat, inițializăm clasa noastră Blockchain. După ce ați terminat, trebuie să creăm trei puncte finale ca mai jos.

  • / punctul meu final
  • / tranzacții / noul punct final
  • / punctul final al lanțului

În cele din urmă, rulăm serverul pe portul 5000.

Aplicația este aproape creată. Tot ce trebuie să facem este să creăm metoda clasei de tranzacții.

@ app.route (‘/ transactions / new’, methods = [‘POST’]) def new_transaction (): values ​​= request.get_json () # Verificarea dacă datele necesare sunt acolo sau nu sunt necesare = [‘sender’, ‘ destinatar ‘,’ suma ‘] dacă nu toate (k în valori pentru k necesare): returnează’ Valori lipsă ‘, 400 # crearea unui nou index de tranzacție = blockchain.new_transaction (valori [‘ expeditor ‘], valori [‘ destinatar ‘) , valori [‘suma’]]) răspuns = {‘mesaj’: f’Transacția este programată să fie adăugată la blocul nr. {index} ‘} returnează jsonify (răspuns), 201

Citește și: Iată ce trebuie să știi despre dovada muncii blockchain

Punct final de exploatare

Ultimul punct final pe care urmează să-l creăm este punctul final de minerit. Pentru a face acest lucru, trebuie să ne asigurăm că face următoarele trei lucruri.

  • Calculul dovezii de lucru
  • Forjați un nou blockchain și apoi adăugați-l la lanț
  • Recompensează minerul pentru munca sa

@ app.route (‘/ mine’, methods = [‘GET’]) def mine (): """Aici facem să funcționeze dovada algoritmului de lucru""" last_block = blockchain.last_block last_proof = last_block [‘proof’] proof = blockchain.proof_of_work (last_proof) # recompensarea minerului pentru contribuția sa. 0 specifică că noua monedă a fost extrasă blockchain.new_transaction (expeditor ="0", recipient = identificator_nod, sumă = 1,) # acum creați noul bloc și adăugați-l în lanț previous_hash = blockchain.hash (last_block) block = blockchain.new_block (dovadă, previous_hash) response = {‘message’: ‘Noul bloc a fost falsificat ‘,’ index ‘: bloc [‘ index ‘],’ tranzacții ‘: bloc [‘ tranzacții ‘],’ dovadă ‘: bloc [‘ dovadă ‘],’ previous_hash ‘: bloc [‘ previous_hash ‘]} return jsonify (răspuns), 200

Citiți acum: Ghid pentru începători: Ce este AION? Rețea blockchain din prima generație a treia din lume

3. Interacțiunea Blockchain

Ultimul pas este de a interacționa cu blockchain-ul. Vom folosi Postman pentru a interacționa cu rețeaua blockchain folosind API-ul pe care tocmai l-am creat.

Rulați codul de mai jos pe Python Console

python blockchain.py

Concluzie

Acest lucru ne conduce la sfârșitul modului nostru de a construi un blockchain. Sper că pașii și codurile de mai sus vă vor ajuta să construiți un Blockchain în Python. Deci, dacă sunteți un novice și aspirați să construiți o carieră în Blockchain, vă sugerăm să începeți cariera dvs. blockchain cu cursul nostru gratuit de bază Blockchain. Alegeți-ne ca partener de studiu și vă vom primi până când nu veți obține slujba de vis.

Deci, ce părere aveți despre blockchain și implementarea acestuia? Comentează mai jos și anunță-ne.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me