Kuinka rakentaa lohkoketju Pythoniin?

Jos haluat oppia rakentamaan lohkoketjun, olet tullut oikeaan paikkaan. Sukelletaan syvälle oppiaksesi, kuinka voit luoda lohkoketjun pythonissa.

Blockchainin ympärillä on tonnia artikkeleita, mutta kaikki eivät puhu blockchainin rakentamisesta tyhjästä. Kehittäjänä teoriat ovat tärkeitä, mutta sinun on myös luotava lohkoketju ymmärtämään sen takana oleva käsite kokonaan.

Blockchainien ydinidea on sen hajautettu luonne. Sinua kiehtoo se, miten se kaikki toimii sisällä. Blockchain saattaa kuulostaa yksinkertaiselta, mutta sisällä on paljon protokollia ja algoritmeja, jotka saavat sen tapahtumaan. Aiomme käyttää Pythonia luomaan lohkoketjun tyhjästä.

Voit myös tallentaa artikkelin ja lisätä sen kirjanmerkkeihin seuraavasti: “Kuinka rakennamme lohkoketjumme”. Usko minua; artikkeli auttaa sinua pitkällä aikavälillä.

Koskaan kuullut blockchainista? Tarkista sitten 101Blockchainin ilmainen kurssi. Jos etsit urasi etenemistä, tutustu Certified Enterprise Blockchain -kurssiin, jossa opit kuinka yrityksen lohkoketju toimii. Aloitetaan.

Oletko aloittelija Blockchainissa? Ilmoittaudu Blockchain Free -kurssille ja aloita Blockchain-matkasi nyt.

Kuinka rakentaa lohkoketju

Paras tapa oppia mitä tahansa on oppia tekemällä. Varmista ensin, että olet samalla sivulla kuin minä, tarkista ensin vaatimukset. Kuvailemme myös lyhyesti blockchainia niin, että olemme molemmat samalla sivulla.

Kuinka luoda lohkoketju Pythonissa

Vaatimus

Perusvaatimus oppaan noudattamiseksi on osata koodata. Jos et ole koskaan koodannut elämässäsi, tämä opas ei ole sinua varten. Suosittelen tutustumaan erilaisiin aloittelijan tason kursseihin, jotka ovat saatavilla verkossa. Suosittelen EdX: ää, Udacity: tä ja Courseraa parhaan oppimiskokemuksen saamiseksi.

Oletko jo koodaaja? Sitten sinun pitäisi tietää perus-Pythonista. Lisäksi se auttaa sinua seuraamaan “Kuinka rakentaa estoketjua” -opetusohjelmaa.

Lue nyt: Quorum Blockchain Ultimate Guide


Olemme luoneet opetusohjelman, jotta kuka tahansa voi seurata sitä. Joten, jos et tiedä ja haluat oppia rakentamaan blockchainin tyhjästä, olet tervetullut tekemään niin!

Jos et tiedä Pythonia, älä huoli, koska se on helppo noutaa. Katso Python-dokumentaatio aloittaaksesi.

Aiomme käyttää Python 3.6+ -ohjelmistoa. Jos päätät käyttää muita Python-versioita, sinun on ehkä tehtävä enemmän tutkimuksia, jotta koodi toimisi. Opastustarkoituksiin suosittelen käyttämäni version asentamista.

Viimeiseksi sinun tulisi tietää myös HTTP: stä – protokolla, jota käytetään kahden osapuolen väliseen viestintään Internetissä.

Pythonin asentaminen pipin avulla

Sinun on asennettava Python pipin avulla. Sinun on myös asennettava upea Requests and Flask -kirjasto. Suorita se yksinkertaisesti suorittamalla alla oleva komento.

$ pip install Pullo == 0.12.2 pyyntöä == 2.18.4

Jos käytät Windows-ympäristöä, voit ladata Pythonin viimeisimmän version suoraan osoitteesta python.org.

Minulle ladattiin Python 3.8.1 – uusin koontiversio opetusohjelman kirjoittamisen aikaan.

IDE: n mielestäni mieluummin käytetään PyCharmia. Käytän Python-yhteisöversiota opetusohjelmassa. Voit vapaasti käyttää mitä tahansa valitsemaasi IDE: tä. Toinen loistava vaihtoehto on Visual Studio Code – ilmainen, avoimen lähdekoodin integroitu kehitysympäristö.

Viimeinen tarvitsemasi työkalu on Postman – HTTP-asiakas. Vaihtoehtoisesti voit käyttää myös cURL.

Suosittelen myös virtuaalisen ympäristön asentamista, jotta kehityksellesi luodaan täysin erilainen ympäristö. Voit seurata tämän oppaan sen asettamiseksi oikein.

Blockchain Revised

Ennen kuin siirrymme rakentamaan blockchainia, meidän on päivitettävä ajatuksemme blockchainista. Tämä auttaa meitä pysymään samalla sivulla.

Blockchain on hajautettu pääkirjatekniikka, jossa vertaisryhmät voivat osallistua, olla vuorovaikutuksessa ja suorittaa tapahtumia ilman keskitetyn yksikön tarvetta. Jokaisella vertaisryhmällä on kopio pääkirjasta, mikä tekee hakkereista mahdotonta tehdä petoksia järjestelmässä. Blockchainin keskeisiä piirteitä ovat läpinäkyvyys, muuttumattomuus ja turvallisuus. Se käyttää kehittyneitä kryptovaluutta-algoritmeja tietoturvan varmistamiseksi. Lisäksi päästäkseen yksimielisyyteen blockchain-verkko käyttää konsensusalgoritmeja, kuten Proof-of-Work, Proof-of-Stake jne.

Lue myös: Blockchain aloittelijoille: Aloitusopas

Blockchainin rakentamisen aloittaminen

Kun kaikki vaaditut asennukset on tehty, olemme nyt valmiita aloittamaan opetusohjelmamme “Kuinka rakentaa lohkoketjua”.

Aloittamiseksi sinun on luotava blockchain.py-tiedosto.

1. Lohkoketjun luominen

Ensimmäinen vaihe on tehdä toimiva blockchain-ratkaisu. Aluksi meidän on luotava Blockchain-luokka. Siellä luomme rakentajan, joka aloittaa ketjun ja tapahtumaluettelon. Ketjuluettelo tallentaa lohkoketjumme, kun taas tapahtumat tallennetaan current_transacations-taulukkoon.

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

Seuraavaksi meidän on luotava funktio new_block, jota käytetään uusien lohkojen luomiseen ja lisäämiseen sitten olemassa olevaan ketjuun. New_block-funktion koodi on seuraava:

def new_block (self): #Tämä toiminto luo uudet lohkot ja lisää sitten olemassa olevaan ketjupassiin

New_transcaction-menetelmä luo uuden tapahtuman ja lisää tapahtuman sitten jo olemassa olevaan tapahtumaluetteloon.

def new_transaction (self): #Tämä toiminto lisää uuden tapahtuman jo olemassa oleviin tapahtumien läpäisyihin. Meillä on myös hash-toiminto, jota käytetään luomaan lohkon hash. @staticmethod def hash (lohko): # Käytetään lohkon hajauttamiseen

Viimeinen toiminto, jonka aiomme luoda last_block. Sitä käytetään kutsumaan ketjun viimeinen lohko.

Voimme luoda myös kolme muuta toimintoa.

  • register_node () → Rekisteröi uusi solmu ja lisää se verkkoon
  • valid_proof () → Varmistaa, että ketjulle lähetetty lohko ratkaisee ongelman
  • valid_chain () → Tämä tarkistaa, ovatko ketjun seuraavat lohkot kelvollisia.

Blockchain.py-suunnitelma näyttää alla olevalta.

class Blockchain (object): def __init __ (self): self.chain = [] self.current_transactions = [] def new_block (self): #Tämä toiminto luo uudet lohkot ja lisää sitten olemassa olevaan ketjupassiin def new_transaction (self): #Tämä toiminto lisää uuden tapahtuman jo olemassa oleviin tapahtumiin pass @ staticmethod def hash (block): # Käytetään lohkon hajauttamiseen @property def last_block (self): # Kutsuu ja palauttaa ketjupassin viimeisen lohkon

Blockchain-luokka hallitsee koko ketjua. Luokassa määritellyt määritelmät hallitsevat lohkoketjun eri toimintoja.

Käydään läpi jokainen alla olevista menetelmistä.

Lue nyt: Mikä on blockchain-sirpalointi: Johdatus blockchain-skaalausratkaisuun

Lohkon rakenne

Lohko sisältää elintärkeää tietoa tapahtumista ja ketjuista. Ketjun kaikki lohkot sisältävät seuraavat tiedot

  • indeksi
  • aikaleima Unix-aikaa
  • tapahtumaluettelo
  • todiste
  • Edellinen lohkon hajautus

Suurin osa lohkon tiedoista on itsestään selviä. Tässä kaksi keskeistä muuttujaa ovat edellinen_hash, joka sisältää edellisen lohkon hash-arvon. Tämä on tärkeää, koska se varmistaa, että estoketju on muuttumaton, eikä mikään haitallinen toimija voi päivittää, poistaa tai lisätä ketjuun mitään tietoja.

Lue nyt: Miksi Blockchain muuttaa maailmaa?

Tapahtuman lisääminen estoon

Kun lohkon rakenne on ymmärretty, opitaan nyt lisäämään tapahtuma lohkoon. Sen koodi on alla.

def new_transaction (self): #Tämä toiminto lisää uuden tapahtuman jo olemassa oleviin tapahtumiin """Tämä luo uuden tapahtuman, joka lähetetään seuraavaan lohkoon. Se sisältää kolme muuttujaa, mukaan lukien lähettäjä, vastaanottaja ja määrä """ self.current_transactions.append ({‘lähettäjä: lähettäjä,’ vastaanottaja ‘: vastaanottaja’ summa ‘: summa,}) palauta self.last_block [‘ index ‘] + 1 Kuten näette, se yksinkertaisesti liittää nykyisen_transaktioluettelon objekti, joka sisältää kolme muuttujaa → lähettäjä, vastaanottaja, määrä.

Kun lisäys on tehty, menetelmä lähettää sitten lohkoindeksin ketjuun. Se on seuraava lohko, joka kaivetaan.

Uusien lohkojen luominen

Ennen kuin aloitamme uusien lohkojen luomisen, meidän on luotava syntymälohko. Tätä varten meidän on käytettävä yksinkertaista koodiriviä kuten alla.

self.new_block (edellinen_hash = 1, todiste = 100)

Tämä rivi tulisi lisätä Blockchain-luokkaasi.

New_block () -menetelmää varten sinun on lähetettävä kaksi muuttujaa sen parametreiksi. Se sisältää todisteet ja edellinen_hash.

Katsotaanpa nyt alla olevaa new_block () -menetelmää.

def new_block (itse, todiste, edellinen_hash = Ei mitään): #Tämä toiminto luo uusia lohkoja ja lisää sitten olemassa olevaan ketjuun """Tämä menetelmä sisältää kaksi parametrienkestävää, edellinen hajautusarvo""" lohko = {‘hakemisto’: len (itse.ketju) + 1, ‘aikaleima’: aika (), ‘todiste’: todiste, edellinen_hash: edellinen_hash tai itsehash (itsehakku [-1]),}

# Aseta nykyinen tapahtumaluettelo tyhjäksi.

   self.current_transactions = [] self.chain.append (lohko) -palautuslohko

Selitetään uuden_lohkon koodi. Luomme lohkoluettelon, joka sisältää kolme tärkeää parametria. Kun ne on määritelty, kirjoitamme sitten myös koodin, jolla nollataan nykyinen_transaktioluettelo ja lisätään sitten lohko ketjuun. New_block-menetelmä, kun sitä kutsutaan, palauttaa lohkon.

Lue nyt: Aloittelijan opas: Mikä on Ethereum Classic?

Määritetään myös alla oleva menetelmä last_block.

@omaisuus

def last_block (itse):

# Soittaa ja palauttaa ketjun viimeisen lohkon

palauta oma ketju [-1]

Lisäksi hash () -menetelmän koodi on seuraava:

def hash (lohko): # Käytetään lohkon hajauttamiseen """Seuraava koodi luo SHA-256-lohkomerkin ja varmistaa myös, että sanakirja on järjestetty""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () Jos yhdistät kaikki koodit tähän asti, meillä on seuraava blockchain.py. Tarkista se alla.

class Blockchain (object): def __init __ (self): self.chain = [] self.current_transactions = [] self.new_block (previous_hash = 1, proof = 100) def new_block (itse, todiste, edellinen_hash = ei mitään): #This toiminto luo uusia lohkoja ja lisää sitten olemassa olevaan ketjuun """Tämä menetelmä sisältää kaksi parametrienkestävää, edellinen hajautusarvo""" lohko = {‘hakemisto’: len (itse.ketju) + 1, ‘aikaleima’: aika (), ‘todiste’: todiste, edellinen_hash: edellinen_hash tai itseshash (itseketju [-1]),} # Aseta nykyisen tapahtumaluettelon tyhjäksi. self.current_transactions = [] self.chain.append (block) return block def new_transaction (self): #Tämä toiminto lisää uuden tapahtuman jo olemassa oleviin tapahtumiin """Tämä luo uuden tapahtuman, joka lähetetään seuraavaan lohkoon. Se sisältää kolme muuttujaa, mukaan lukien lähettäjä, vastaanottaja ja määrä """ self.current_transactions.append ({‘lähettäjä: lähettäjä,’ vastaanottaja ‘: vastaanottaja,’ määrä ‘: summa,}) palauta its.viestilohko [‘ hakemisto ‘] + 1 @ staticmethod def hajautus (lohko): #Käytetään hajautukseen lohko """Seuraava koodi luo SHA-256-lohkomerkin ja varmistaa myös, että sanakirja on järjestetty""" block_string = json.dumps (block, sort_keys = True) .encode () return hashlib.sha256 (block_string) .hexdigest () @property def last_block (self): # Kutsuu ja palauttaa ketjun viimeisen lohkon return self.chain [ -1]

Todiste työn toteuttamisesta

Seuraava askel blockchain.py: n rakentamisessa on Proof-of-Work -toteutus.

Joten mikä on työn todiste? Se on konsensusmenetelmä, jota käytetään lisäämään uusia lohkoja ketjuun. Se asettaa haasteen kaivostyöläiselle, ja kun kaivosmies on ratkaissut ongelman, lohko tarkistetaan. Kaivosmies saa vastineeksi palkkion ongelman monimutkaisuuden perusteella.

Bitcoinin työn todiste tunnetaan nimellä Hashcash. Se varmistaa, että bitcoin-verkon yksimielisyys toimii tarkoitetulla tavalla.

Lue myös: Konsensusalgoritmit: Blockchain-tekniikan juuri

Määritellään menetelmä proof_of_work (). Menetelmä on osa Blockchain-luokkaa.

def-työtarkastus (itse, viimeinen_kestävä): """Tässä menetelmässä konsensusalgoritmi toteutetaan. Se vaatii kaksi parametria, mukaan lukien itse ja last_proof""" proof = 0 kun self.valid_proof (last_proof, proof) on väärä: proof + = 1 return proof @staticmethod def valid_proof (last_proof, proof): """Tämä menetelmä vahvistaa lohkon""" guess = f ‘{last_proof} {proof}’. koodaa () guess_hash = hashlib.sha256 (arvaus) .hexigest () return arvaa_hash [: 4] == "0000"

Ensimmäinen proof_of_work-menetelmä on yksinkertainen; se yksinkertaisesti asettaa todistuksen arvoksi 0 ja suorita sitten jonkin aikaa silmukka suorittamaan valid_proof-menetelmä. Jos se on väärä, lisää yksi todisteeseen.

Voit lisätä hajautuksen vaikeutta lisäämällä nollia.

Tämä johtaa meidät Blockchain.py-palvelumme loppuun. Koodimme on seuraava.

luokan lohkoketju (objekti): def __init __ (itse): itseketju = [] itsensä nykyiset_transaktiot = [] itsensä uusi_lohko (edellinen_hash = 1, todiste = 100) def työn_todistus (itse, viimeinen): """Tässä menetelmässä konsensusalgoritmi toteutetaan. Se vaatii kaksi parametria, mukaan lukien itse ja last_proof""" proof = 0 kun self.valid_proof (last_proof, proof) on väärä: proof + = 1 return proof @staticmethod def valid_proof (last_proof, proof): """Tämä menetelmä vahvistaa lohkon""" guess = f ‘{last_proof} {proof}’. koodaa () guess_hash = hashlib.sha256 (arvaus) .hexigest () return arvaa_hash [: 4] == "0000" def new_block (itse, todiste, edellinen_hash = Ei mitään): #Tämä toiminto luo uusia lohkoja ja lisää sitten olemassa olevaan ketjuun """Tämä menetelmä sisältää kaksi parametrienkestävää, edellinen hajautusarvo""" lohko = {‘hakemisto’: len (oma.ketju) + 1, ‘aikaleima’: aika (), ‘todiste’: todiste, edellinen_hash: edellinen_hash tai itseshash (itseketju [-1]),} # Aseta nykyisen tapahtumaluettelon tyhjäksi. self.current_transactions = [] self.chain.append (block) return block def new_transaction (self): #Tämä toiminto lisää uuden tapahtuman jo olemassa oleviin tapahtumiin """Tämä luo uuden tapahtuman, joka lähetetään seuraavaan lohkoon. Se sisältää kolme muuttujaa, mukaan lukien lähettäjä, vastaanottaja ja määrä """ self.current_transactions.append ({‘lähettäjä: lähettäjä,’ vastaanottaja ‘: vastaanottaja,’ summa ‘: summa,})

return self.last_block [’index’] + 1

@staticmethod

def hash (lohko):

# Käytetään lohkon hajauttamiseen

“” “Seuraava koodi luo SHA-256-lohko-hashin ja varmistaa myös, että sanakirja on järjestetty” “”

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

return hashlib.sha256 (block_string) .hexdigest ()

@omaisuus

def last_block (itse):

# Soittaa ja palauttaa ketjun viimeisen lohkon

palauta oma ketju [-1]

2. API-integraatio

Hienoa, luomme toimivan lohkoketjun! Jotta voimme käyttää sitä tehokkaasti, meidän on luotava API (Application Programming Interface).

Tätä varten aiomme käyttää suosittua Python Frameworkia: Flask.

Pullo on mikrokehys, mikä tarkoittaa, että se on kevyt, ja voit lisätä tarvitsemasi kirjastot. Sen avulla voit myös luoda Python-toiminnon päätepisteen helposti.

API: n luomiseksi meidän on ensin varmistettava, että lohkoketjumme voi hyväksyä pyyntöjä HTTP: n kautta. Tätä varten meidän on luotava lisää menetelmiä.

Nyt muokkaamme blockchain.py-tiedostoa.

# Sovellussolmusovelluksen luominen = Pullo (__ nimi__) solmun tunniste = str (uuid4 ()). Korvaa (‘-‘, ”) # Alustetaan lohkoketjua blockchain = Blockchain () @ app.route (‘/ mine’, method = [ ‘GET’]) def mine (): return "Louhitaan uusi lohko" @ app.route (‘/ payments / new’, Methods = [‘POST’]) def new_transaction (): return "Uuden tapahtuman lisääminen" @ app.router (‘/ chain’, Methods = [‘GET’]) def full_chain (): response = {‘chain’: blockchain.chain, ‘length’: len (blockchain.chain)} return jsonify (vastaus) , 200 jos __nimi__ == ‘__main__’: app.run (isäntä ="0.0.0.0", portti = 5000)

Koodi on pääosin itsestään selvä. Ensin teemme solmun aloituksen. Seuraavaksi luomme satunnaisen solmun. Kun olet valmis, alustamme sitten Blockchain-luokan. Kun se on tehty, meidän on luotava kolme päätepistettä kuten alla.

  • / minun päätepiste
  • / tapahtumat / uusi päätepiste
  • / ketjun päätetapahtuma

Lopuksi suoritamme palvelimen 5000-portissa.

Sovellus on nyt melkein luotu. Ainoa mitä meidän on tehtävä, on luoda tapahtumaluokka-menetelmä.

@ app.route (‘/ payments / new’, Methods = [‘POST’]) def new_transaction (): arvot = request.get_json () # Tarkistetaan onko vaadittuja tietoja vai ei = = ” lähettäjä ‘,’ vastaanottaja ‘,’ määrä ‘] ellei kaikki (k k: n arvoissa vaaditaan): palauta’ Puuttuvat arvot ‘, 400 # luodaan uusi tapahtumaindeksi = blockchain.new_transaction (arvot [‘ lähettäjä]], arvot [‘vastaanottaja’ , arvot [‘määrä’]]) vastaus = {‘viesti’: f’Tapahtuma on tarkoitus lisätä lohkoon nro. {index} ‘} return jsonify (vastaus), 201

Lue myös: Tässä on mitä sinun tarvitsee tietää Blockchain-todisteesta

Kaivostoiminnan päätepiste

Viimeinen päätepiste, jonka aiomme luoda, on kaivospäätepiste. Tätä varten meidän on varmistettava, että se tekee seuraavat kolme asiaa.

  • Todiste työn laskemisesta
  • Taota uusi lohkoketju ja lisää se sitten ketjuun
  • Palkitse kaivosmies hänen työstään

@ app.route (‘/ mine’, Methods = [‘GET’]) def mine (): """Tässä teemme todistuksen työalgoritmista""" last_block = blockchain.last_block last_proof = last_block [‘proof’] proof = blockchain.proof_of_work (last_proof) # palkitaan kaivosmies hänen panoksestaan. 0 määrittää uuden kolikon on louhittu blockchain.new_transaction (lähettäjä ="0", vastaanottaja = solmun tunniste, määrä = 1,) # luo nyt uusi lohko ja lisää se ketjuun previous_hash = blockchain.hash (last_block) block = blockchain.new_block (proof, previous_hash) response = {‘message’: ‘Uusi lohko on väärennetty ‘,’ hakemisto ‘: esto [‘ hakemisto ‘],’ tapahtumat ‘: esto [tapahtumat],’ todiste ‘: esto [‘ todiste ‘],’ edellinen_hash ‘: esto [‘ edellinen_hash ‘]} paluu jsonify (vastaus), 200

Lue nyt: Aloittelijan opas: Mikä on AION? Maailman ensimmäinen kolmannen sukupolven blockchain-verkko

3. Blockchain-vuorovaikutus

Viimeinen vaihe on vuorovaikutus lohkoketjun kanssa. Aiomme käyttää Postmania vuorovaikutuksessa blockchain-verkon kanssa juuri luomamme API: n avulla.

Suorita alla oleva koodi Python-konsolissa

python blockchain.py

Johtopäätös

Tämä johtaa meidät loppuun miten rakennamme lohkoketjun. Toivottavasti yllä olevat vaiheet ja koodit auttavat sinua rakentamaan Blockchainin Pythonissa. Joten, jos olet aloittelija ja haluat rakentaa uraa Blockchainissa, suosittelemme, että aloitat blockchain-urasi ilmaisella Blockchain Fundamentals -kurssillamme. Valitse meidät tutkimuskumppaniksesi, ja meillä on sinua, kunnes et saa unelmiesi työpaikkaa.

Joten mitä mieltä olet blockchainista ja sen toteuttamisesta? Kommentoi alla ja kerro siitä meille.

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