Ako zostaviť blockchainovú aplikáciu s Pythonom

Ako vývojár blockchainu budete vedieť viac ako priemerní ľudia o tom, ako veci fungujú pod kapotou. Budete oboznámení s blokmi, hašovaním, uzlami, transakciami, rôznymi dátovými typmi a mnohými ďalšími. Ak však máte predstavu o tom, ako implementovať blockchain v konkrétnom prostredí s náhodnými používateľmi, nebudete s nimi zdieľať všetku svoju múdrosť, nieto ich nútiť, aby sa naučili, ako sa jednotlivé operácie robia. Súčasných používateľov rozmaznáva jednoduché rozhranie s vynikajúcimi používateľskými rozhraniami, ktoré zaručujú skvelý používateľský zážitok. Ak chcete, aby bol váš blockchain projekt príťažlivejší, ako by ste mali, mali by ste ho ľahko používať. Tam prichádzajú na rad decentralizované aplikácie alebo dApps.

Decentralizované aplikácie sú novým trendom vo vývoji softvéru. Stali sa populárnymi po šialenstve ICO, ktoré začalo v roku 2017. Hlavnou charakteristickou črtou dApps je to, že sa plne spoliehajú na blockchain, a preto ich nemôže ovládať ani vypínať žiadna tretia strana. Okrem toho môžu dApps tiež využívať inteligentné kontrakty, o ktorých sme už hovorili, na bezpečné a autonómne vykonávanie rôznych operácií. Inak dApps pripomínajú centralizované aplikácie a môže ísť o čokoľvek, od búrz až po hry. Niektoré z nich môžete skontrolovať z nášho zoznamu 10 dApps tu.

Aj keď pre inteligentné kontrakty a programovanie v dApp existujú niektoré špecializované programovacie jazyky, ako napríklad Solidity, Vyper a Simplicity, na tento účel možno použiť aj iné jazyky. Na účely tohto tutoriálu sme si vybrali Python ako jeden z najkomplexnejších a najuniverzálnejších jazykov. Dnes si ukážeme jednoduchú aplikáciu vytvorenú pomocou Pythonu, spustíme ju a vysvetlíme, ako to funguje. Už to neodkladajme a pusťme sa do práce!

Štruktúra a vlastnosti dApp

Najprv si predstavíme, ako by mala dApp vyzerať a prejsť si jej jednotlivé prvky. Aplikácia dApp má dve hlavné časti:

  • Predná časť

  • Zadný koniec

Klientske rozhranie obsahuje všetko, čo sa zobrazuje používateľovi. Napríklad pri prechádzaní profilom na Facebooku komunikujete s klientskym rozhraním Facebooku. Obvykle sa píše pomocou HTML, CSS a JavaScript, ale existujú aj iné spôsoby, ako to urobiť. Zadná časť je ako motor automobilu. Nikto, okrem mechanikov, sa na to nepozerá, ale robí veci funkčnými. Zatiaľ čo centralizované aplikácie používajú hostiteľské služby a rôzne rámce ako Django a NodeJS, decentralizované používajú namiesto nich blockchainy. V oboch prípadoch komunikácia medzi frontendom & backend sa deje prostredníctvom správ vo formáte JSON.

Mali by sme tiež poznamenať, že keďže úlohy typu backend sa dejú na blockchaine, kde je všetko nemenné, inžinier, ktorý zostavuje dApp, by mal vykonať viacnásobné hĺbkové kontroly svojho projektu, aby sa zabezpečilo, že v kóde nebudú žiadne chyby zabezpečenia. Vďaka tomu budovanie dApps vyzerá skôr ako výroba hardvéru a nie softvéru, ktorý je možné vylepšovať za chodu. Na druhej strane, ak je dApp napísaný perfektne, je prakticky nerealizovateľný, pretože neexistuje žiadny centrálny bod zlyhania. Po druhé, kód pre dApps sa zvyčajne zverejňuje ako open-source. V opačnom prípade bude mať komunita problémy s dôverou a vyhne sa používaniu niektorých aplikácií.

Vytvára sa backend

Teraz, keď vieme, že dApp sa spolieha na blockchain, vytvorme si ho lokálne s Pythonom. Toto je bezpečnejší prístup k učeniu a testovaniu vecí, pretože nechceme preťažiť skutočnú sieť zbytočným kódom. Navyše, táto ukážka vám skôr ukáže princípy fungovania vecí – dApps v skutočnom svete sú oveľa zložitejšie.

Pretože sa všetko stane vo vašom počítači, bude blockchain fyzicky umiestnený na vašom pevnom disku, čo z neho v podstate urobí uzol. Za týmto účelom vytvorte priečinok, ktorý sa vám páči, a nazvite ho „Projekt“. V priečinku vytvorme ďalší, nazvime ho „blockchain“ a pevný kód tam bude prvý blok. Vytvorte textový súbor a otvorte ho v požadovanom editore kódu. Budeme používať Atom.

Inicializuje sa blok genézy

V prvom bloku upresníme, že platiteľ zaplatil príjemcovi tisíc coinov. Ako si iste pamätáte z nášho článku o hashovej sile, hlava každého bloku je hashovaná a hash každého bloku je zahrnutý do nasledujúceho, aby sa zabezpečilo, že k neoprávnenej manipulácii so sieťou nedošlo. Blok Genesis nemá blok pred ním, takže bude prázdny hash.

Blok GenesisObrázok U.Today

Ďalej do nášho priečinka s blockchainom vytvoríme súbor so skriptom. Začnite importom knižnice JSON, pretože budeme používať toto formátovanie. Pokračujte znakom ‘if __name__ == "__hlavné__": ’Vyhlásenie umožňujúce overenie, či sa skript spustí z konzoly alebo nie. Tento krok vám pomôže pri importovaní. Aby náš miestny blockchain fungoval, mali by sme napísať funkciu, ktorá vytvára nové bloky. Okrem toho by mala existovať funkcia na kontrolu, či bol blockchain zmenený alebo nie.

Písanie nových blokov

Poďme kódovať funkciu na vytvorenie nasledujúcich blokov v reťazci. Aby sme to dosiahli, musíme špecifikovať všetky dátové typy, ktoré sme napísali v bloku genézy. Potom vytvoríme príkaz „with“ s funkciou vytvorenia nového súboru, aby bol kód v nových blokoch vhodnejší na čítanie, špecifikujte odsadenie. Keď je hotovo, môžeme spustiť skript a získať súbor s našim testovacím blokom.

Nový testovací blok & amp; ScenárObrázok U.Today

Testovacia funkcia funguje! Teraz ho môžeme rozšíriť na príjem dát a zapisovať ich do ďalších blokov. Aby sme to mohli urobiť, vložíme do funkcie argumenty príjemcu platby, sumy, platiteľa a p_hash (hash predchádzajúceho bloku). T Potom je potrebné, aby funkcia zapísala bloky do príslušného priečinka. Z tohto dôvodu importujte OS na prácu so súborovým systémom počítača. Potom vo funkcii definujeme adresár, ktorý sme vytvorili pre naše bloky pomocou súboru „os.curdir“. Ďalej zadajte túto deklaráciu vo výpise, ktorý píše nový súbor.

Ak pôjdeme ďalej, nemôžeme nechať testovací súbor označený tak, ako je, chceme, aby bol každý nový blok pomenovaný postupne. Pretože náš blok genézy je „0“, nasledujúci blok by mal byť 1 a tak ďalej. Ten je dosť jednoduchý, naša funkcia by mala byť schopná analyzovať hlavný blockchainový adresár. Nájdite posledné číslo posledného bloku, zvýšte toto číslo o jeden a pomenujte ďalší blok. Na získanie všetkých blokov použijeme ‘listdir’ OS a poskytneme mu našu premennú adresárového bloku. Pamätajte, že zoznam listdir netriedi bloky podľa ich mien, takže najnovší súbor, v tomto prípade, nemusí byť taký, aký potrebujeme. Preto musíme použiť porozumenie zoznamu, aby sme vrátili celé čísla pre všetky názvy súborov a zoradili ich pomocou funkcie „triedené“. Na záver naučíme náš blockchain označovať bloky tak, že vrátime názov posledného bloku a zvýšime ho o jeden. Nezabudnite štítok previesť späť na reťazec a do funkcie „s“ pridať názov bloku.

Funkcia na získanie blokovObrázok U.Today

Hašovanie

Zakaždým, keď spustíte skript, získate nový blok. Stále to však nie je blockchain, pretože uzly by tiež mali byť schopné skontrolovať integritu, a teda aj bezpečnosť údajov. Každý z blokov bude mať hash z predchádzajúceho. Začnime hašovaním údajov v blokoch. Najskôr importujeme modul „hashlib“. Potom vytvoríme funkciu, ktorá načíta obsah bloku, spustí ich pomocou hashovacieho algoritmu SHA-256 a vráti hash. Tu by ste mali určiť umiestnenie priečinka „blockchain“, inak funkcia nenájde bloky. Vo funkcii, ktorá vytvára bloky, definujte premennú pre predchádzajúci hash, ktorá spustí našu hashovaciu funkciu pre predchádzajúci blok. Keď to testujeme, vidíme, že nový blok obsahuje hash predchádzajúceho. Môžete ľahko overiť hodnotu hash skopírovaním obsahu bloku číslo 1 do online generátora SHA256 a porovnaním výsledkov.

Funkcia hashovaniaObrázok U.Today

Blokovať overenie

Zatiaľ máme funkciu vytvárania blokov a hashovaciu funkciu. Je čas zaviesť overovací algoritmus pre náš uzol. Funkcia, ktorú vytvoríme, bude schopná získať zoznam všetkých súborov v blockchaine, prečítať hashy predchádzajúceho bloku počnúc od druhého bloku, znova vygenerovať hash každého predchádzajúceho bloku, porovnať ich a vrátiť výsledok.

Začneme deklarovaním premennej, ktorá dostane všetky súbory v adresári ‘blockchain’, premennej, ktorá vráti zoznam súborov, a premennej, ktorá bude radiť bloky v rastúcom poradí. Ďalšou vecou, ​​ktorú by sme mali urobiť, je vytvoriť funkciu schopnú iterovať cez bloky a čítať hodnoty hash z predchádzajúcich blokov. To sa dá urobiť pomocou slučky „for“, ktorá načíta všetky údaje z bloku a vráti iba to, čo zodpovedá „hash“. Teraz k ďalšiemu vytvoreniu hodnoty hash, aby sme ju overili proti funkcii, ktorú funkcia prijíma. Vo vnútri slučky „pre“ ponecháme premennú „true_h“, ktorá spustí hashovaciu funkciu pre predchádzajúci blok. Posledným krokom je porovnanie hashov pomocou príkazu „if / else“. Výsledky sa zapíšu do poľa, ktoré sme pre ne nastavili a všetko sa zobrazí v konzole.

Blokovať overenieObrázok U.Today

Po vyčistení niektorých prepúšťaní máme miestny blockchain kódovaný v Pythone.

Budovanie frontendu

Aj keď sa nám podarilo umiestniť všetky potrebné funkcie do 60 riadkov kódu, pre priemerného používateľa by to stále vyzeralo ako hromada gýčov. Preto musíme umožniť ľahké pochopenie a použitie rozhrania frontend. V tomto tutoriále budeme používať rámec Flask spolu s HTML, CSS a JavaScript.

Nastavenie prostredia

V hlavnom adresári projektu vytvorte priečinok pre virtuálne prostredie, ktoré bude fungovať ako backend. Ak ste tak ešte neurobili, stiahnite si ich Python z oficiálnej stránky alebo prostredníctvom príkazového riadku vo vašom OS (v OSX používame homebrew) a nainštalujte si ho. Ak pôjdete ďalej, nainštalujte si Virtualenv & Pip cez príslušné príkazy z príkazového riadku. Potom spustite virtuálne prostredie z príkazového riadku v priečinku „UI“. Ak bude všetko vykonané správne, dostanete nový priečinok. Je čas ju aktivovať a nainštalovať banku cez Pip.

Vytvorenie a aktivácia venvObrázok U.Today

Poďme dať náš zadný koniec vedľa frontendu. Vystrihnite priečinok „blockchain“ a skript a vložte ich do priečinka „app“ v hlavnom adresári. V rámci backendového priečinka musíme vytvoriť hlavný súbor skriptu.

Vytvorenie štruktúry

V našom hlavnom skripte by sme mali najskôr importovať banku a umiestniť odkaz na názov súboru, aby umožnila banke porozumieť cestám. Mali by sme tiež vložiť štandardné vyhlásenie, ktoré kontroluje, či je skript spustený z konzoly a spúšťa našu aplikáciu. Nezabudnite pridať ladenie, aby ste umožnili opätovné načítanie banky pri každej zmene kódu.

Prázdna aplikáciaObrázok U.Today

Ak v tejto chvíli spustíte skript, môžete vidieť, že localhost: 5000 je hore, ale zobrazuje chybu 404. Je to normálne, pretože aplikácia je stále prázdna. Začnime ho napĺňať vytvorením funkcie, ktorá umožní nášmu uzlu spracovávať dotazy používateľov. Do nej (umiestnením znaku @ pred funkciu) vložíme funkciu indexu. Takto sa vytvorí štruktúra miestnych adries URL a zodpovedajúcich funkcií. Funkcia „index“ zobrazí používateľom index.html prostredníctvom modulu „render_template“.

Aplikácia s funkciou displejaObrázok U.Today

Teraz môžeme pokračovať v vytváraní našej štruktúry HTML. K dispozícii budú dva súbory, jeden so všeobecnými informáciami a druhý s používateľským rozhraním prvej stránky. V base.html naimportujeme knižnicu Bootstrap na vytvorenie rozloženia pomocou CSS. Vytvorme centrovaný stĺpec a vložíme doň blok obsahu vo formáte, ktorý bude možné interpretovať pomocou Flaskovej Jinja.

Prvá stránka v htmlObrázok U.Today

Skladanie používateľského rozhrania

Našou aplikáciou bude jednoduchý platobný systém. Bude tu platiteľ, príjemca platby a prevedená suma peňazí. Všetko sa bude diať cez blockchain, ale pre používateľa to bude vyzerať ako bežná aplikácia. Pri prevode peňazí na internete zvyčajne vyplníte nejaký formulár a odošlete ho. Bootstrap má rôzne formy, ktoré nám pomáhajú s niektorými predvoľbami. Môžete skopírovať ten, z ktorého sme si vybrali tu a skopírujte kód do svojho index.html. V predpísanej podobe budú iba dve polia a začiarkavacie políčko, políčko začiarkneme a pole pridáme. Potom upravíme správne štítky, identifikátory, typy a zástupné symboly. Nakoniec našu indexovú funkciu pripíšeme formuláru. Keď používateľ zadá svoje meno, množstvo a sprostredkovateľa, všetky informácie je potrebné niekde uložiť a potom zahrnúť do bloku. Z tohto dôvodu upravme naše vstupné polia pridaním výrazov „name“ a „value“. Táto hodnota použije metódu „get“ na získanie toho, čo používateľ zadá do poľa „Payer“. Nezabudnite určiť prázdny reťazec pre prípad, že by užívateľ nič nezadal.

FormulárObrázok U.Today

Vráťme sa k nášmu hlavnému skriptu. Skript by mal byť schopný pochopiť, či je požiadavka odoslaná používateľom POST alebo nie. Aby sme to mohli urobiť, naimportujeme modul požiadavky z banky a špecifikujeme metódy v našej aplikácii. V rámci aplikácie deklarujeme premenné, ktoré si vyžiadajú príslušné údaje z formulára.

Aktualizovaná aplikáciaObrázok U.Today

Ak pôjdeme ďalej, budeme musieť odovzdať všetky zhromaždené údaje do nového bloku. To si vyžaduje, aby sme spojili hlavný skript s tým, ktorý píše bloky. Za týmto účelom do príkazu „if“, ktorý kontroluje typ požiadavky, vložíme funkciu „write“ s argumentmi zodpovedajúcimi tomu, čo máme v našich blokoch..

Prepojenie používateľského rozhrania s backendomObrázok U.Today

Teraz, keď sa vrátime do nášho prehliadača a zadáme transakciu, dostaneme do nášho blockchain priečinka nový blok, ktorý bude obsahovať informácie, ktoré sme komunikovali. Vidíte však, že polia sa neobnovili. Z tohto dôvodu musíme používateľa presmerovať na novú inštanciu index.html. Nezabudnite importovať moduly, ktoré používame, z banky. Voila, všetko sa obnoví po odoslaní.

PresmerovanieObrázok U.Today

Posledným dotykom na naše používateľské rozhranie bude a tlačidlo vďaka čomu náš uzol kontroluje prípadné narušenia bezpečnosti v našom blockchaine. Za týmto účelom vytvoríme ďalšie smerovanie na overenie s funkciou v ňom. Ďalej sa vráťme k nášmu base.html a určme ďalšie dva kontajnery pre tlačidlo a výsledky overenia s hornými okrajmi definovanými ako 5. Vložte blok do jedného kontajnera a tiež do index.html.

Blok na overenieObrázok U.Today

V ďalšom kroku vyberieme tlačidlo z knižnice Bootstrap a umiestnime ho do súboru base.html vo forme. Do formulára vložte našu funkciu „overiť“ ako akciu a pripojte ju k funkcii „skontrolovať“ v hlavnom skripte. Po dokončení sa vráťte do hlavného skriptu a do funkcie kontroly vložte overovaciu funkciu zo skriptu na vytváranie blokov. Prejdite na stránku base.html, kde chceme pre každú premennú v poli „výsledky“ vytvoriť slučku „pre“. V slučke „pre“ urobíme div, ktorý bude zobrazovať výsledky overenia.

Overenie slučkyObrázok U.Today

Testuje sa dApp

Takže tu to máte. Vráťte sa do prehliadača a obnovte stránku. Odteraz môže naša dApp zaznamenávať transakcie do blockchainu a overovať, či nedošlo k hacknutiu niektorého z blokov. Aby ste sa uistili, že všetko funguje, odošlite transakciu s údajmi podľa vášho výberu a prejdite do priečinka blockchain. Mali by ste tam mať nový textový súbor s platiteľom, sumou a príjemcom, ktorého ste zadali, a hash z predchádzajúceho bloku.

rozhranie dAppObrázok U.TodayNový blokObrázok U.Today

Vráťte sa do prehliadača, urobte ďalšie bloky a spustite proces overenia. Uvidíte, že v tomto okamihu sú všetky bloky pravé. Je čas hacknúť náš uzol! Prejdite do priečinka blockchain a zmeňte jeden z blokov, ktoré ste vytvorili pred najnovším. Teraz sa vráťte späť do prehliadača a znova skontrolujte náš reťazec. Ako vidíte, náš uzol signalizuje, že jeden blok je poškodený, a preto by sme nemali dôverovať údajom tohto blockchainu.

Falošné blokyObrázok U.Today

Zhrnutie

Keď to zhrnieme, dnes sme vám ukázali jednoduchú decentralizovanú aplikáciu na lokálne prevádzkovanom blockchaine. Vytváranie aplikácií decentralizovaným spôsobom má svoje funkcie, ale je to tiež podobné ako pri vytváraní bežných aplikácií. Aplikácie sú koniec koncov určené pre koncového používateľa, takže na prvý pohľad by sme asi veľa rozdielov nenašli.

Ak hľadáte programovanie dApps, musíte poznať princípy technológie blockchain a rozumieť písaniu pre frontend aj backend. Vďaka takej pokročilej úrovni požadovaných vedomostí by ste si mali lepšie zvoliť rýchly a ľahký programovací jazyk ako Python. S Pythonom budete schopní vytvoriť kompaktný kód aj spustiť lokálny server bez problémov. To posledné je veľmi dôležité, pretože chcete pred zverejnením vykonať všetky potrebné bezpečnostné kontroly, pretože blockchain je nemenný.

Dúfame, že vám tento výukový program veľmi pomohol získať prehľad o aplikáciách dApps. Užite si to!