Programování blockchainu: Solidity. Programování inteligentních kontraktů

Za více než 10 let svého vývoje se blockchain významně rozšířil z přímého systému přenosu hodnoty pomocí coinů na základ pro Web 3.0 a decentralizované aplikace. Stalo se tak hlavně kvůli vypuknutí nových projektů poté, co Ethereum představilo svůj standard ERC20 a inteligentní smlouvy.

Inteligentní smlouvy byly široce používány při získávání finančních prostředků pro ICO, aby byla zajištěna transparentnost pro účastníky. To je proslavilo, ale nebyla to jediná implementace. Existují úspěšné případy inteligentních smluv při vytváření distribuovaných autonomních organizací, správě práv a provádění správy. Jejich potřeba je tak zřejmá, že dokonce existují pokusy o vytvoření chytrých kontraktů pro bitcoiny.

Pokud se chcete dostat do blockchainového inženýrství, budete muset vědět, jak fungují inteligentní smlouvy a jak je budovat. Ethereum naštěstí poskytuje vše potřebné, včetně vlastního programovacího jazyka – Solidity. Tento jazyk byl speciálně vytvořen pro práci s virtuálním počítačem Ethereum. Je to docela snadné pochopit, ale musíte mít na paměti některé charakteristické rysy. Dnes se ponoříme hluboko do světa inteligentních smluv a některé z nich kódujeme. Pojďme na to!

Jak funguje Ethereum?

Nejprve musíme pochopit základy blockchainu Etherea a jeho fungování. To nám pomůže pochopit rozdíl mezi kódováním centralizovaných aplikací a decentralizovaných (což jsou v zásadě inteligentní smlouvy)..

V jádru má Ethereum virtuální stroj. Pravděpodobně jste se s nimi setkali dříve při spouštění starých her v emulátoru nebo při spouštění nějakého softwaru specifického pro OS na nepůvodním OS. Jednoduše řečeno, virtuální stroj je počítač uvnitř počítače, který využívá hardware původního stroje. V případě Etherea využívá EVM prostředky počítačů připojených k síti (uzly). Stejně jako jakýkoli jiný virtuální počítač má i Ethereum vlastní RAM a ROM, které používají programy běžící nad ním. Jedinou významnou výjimkou je, že paměť ROM EVM je blockchain, takže jakmile se tam něco dostane, nelze to odstranit.

Proč je toto důležité? Vytváření inteligentních smluv je neuvěřitelná odpovědnost, protože v případě zranitelnosti mohou být peníze uživatelů ukradeny nebo ztraceny. I když můžete upravit nebo úplně nahradit kód na centralizovaném serveru, na decentralizovaném virtuálním počítači to udělat nemůžete. Kromě toho každá akce prováděná pomocí inteligentní smlouvy vyžaduje zaplacení poplatků síti. Proč? Protože EVM musí danou úlohu zpracovat a dokáže ji pouze s využitím výpočetní síly některých uzlů. Poplatky se nazývají Plyn a platí se v Gwei, což je obdoba bitcoinového satoshi.

Jak funguje inteligentní smlouva?

Pokud jste někdy používali Ethereum, alespoň jednou jste vygenerovali peněženku v síti. Vaše peněženka je v podstatě účet představovaný adresou. Inteligentní smlouva je také účet, ale liší se od běžného účtu.

Jakmile vytvoříte peněženku, můžete ji připojit k jakékoli z dostupných sítí a jediná věc, která se změní, je váš zůstatek. Je to proto, že uživatelské adresy nejsou interní v žádné síti – existují paralelně. Na druhou stranu je instance inteligentního kontraktu zahrnuta v daném blockchainu a nelze ji zobrazit v jiném řetězci. Aby bylo možné zahájit smlouvu v hlavní síti po jejím testování, řekněme Rinkeby, její tvůrce bude muset nasadit novou instanci smlouvy. To bude vyžadovat opětovné kompilace zdrojového kódu. Tvůrce smlouvy může vytvořit tolik instancí kódu, kolik si přejí, pokud mají dostatek ETH k zaplacení plynu za interakci se sítí.

Stejně jako centralizovaná aplikace má chytrá smlouva vyhrazené místo pro ukládání svých zdrojů a zástupný symbol pro kód (obrázek jako webovou stránku, kterou si stáhnete z internetu, bude mít soubor a.html a některé složky s obrázky a další věci). Existuje také údaj o tom, kolik ETH má smlouva na svém zůstatku; to je zásadní pro různé případy použití, jako je získávání finančních prostředků, závěti atd. Úplné schéma je uvedeno na obrázku níže.

Ethereum EVM Schéma peněženkyObrázek U.Today

Jak vytvořit inteligentní smlouvu?

Nyní, když víme, jaké jsou principy fungování Etherea a jak v něm fungují inteligentní smlouvy, můžeme si jeden vytvořit sami. Nejprve budeme muset nastavit správné prostředí. Můžete jít dvěma cestami, a to buď napsáním kódu v prohlížeči pomocí Remix IDE poskytnutého Ethereum Foundation, nebo stažením kódovací aplikace podle vašeho výběru spolu s některými balíčky. Pro účely tohoto tutoriálu vám ukážeme Remix i Atom (univerzální kódovací aplikace pro Mac & Okna).

První chytrá smlouva, kterou se chystáme uzavřít, vezme jména různých modelů automobilů a jejich výkon. To, co chceme vidět, jsou dvě vstupní a dvě výstupní pole pro hodnoty, které máme. Protože budeme měnit vstupy, musíme nastavit proměnné dvou typů: řetězec pro jména a celé číslo pro koňskou sílu.

Před naší smlouvou vložíme řádek, který určuje jazykovou verzi, protože to pomůže kompilátoru správně upravit kód. Kompilace kódu je nutná, protože jakmile se dostaneme do fáze nasazení, kód se přizpůsobí strojovému kódu, který bude EVM schopen číst a zpracovávat. Kromě toho bude vytvořeno binární rozhraní aplikace, které lze dále použít při vytváření plnohodnotné decentralizované aplikace. Nejnovější verzi Solidity můžete kdykoli zkontrolovat na jejích oficiálních webových stránkách. Chcete-li jej určit, zadejte „pragma solidity“ a verzi za znak „^“.

Abychom pro naši smlouvu stanovili hranice, dáme jí název a za ním závorku. Nejprve deklarujeme dvě proměnné: „model“ a „HP“. První bude řetězec představující model automobilu a druhý celé číslo představující výkon daného modelu automobilu. O proměnných z hlediska Solidity je třeba zmínit dvě věci. Prvním z nich je, že bychom měli deklarovat, zda by třetí strany měly být schopny je vidět, a to tak, že vedle nich uvedete „veřejné“ nebo „soukromé“. Druhá možnost spočívá v tom, že celá čísla v Solidity mohou být podepsána nebo nepodepsána. Nepodepsané celé číslo je možné pouze a je zapsáno jako „uint“. Celé číslo se znaménkem může být kladné & negativní a je zapsán jako „int“.

Poté, co jsme určili naše proměnné, je čas napsat některé funkce, které naše inteligentní smlouva provede. Nejprve musíme vytvořit zástupné symboly pro náš model a HP. Použijeme několik nastavených veřejných funkcí a připojíme k nim naše proměnné. Za druhé, musíme nastínit několik get veřejných funkcí, které vrátí vstup. Podívejte se, jak vypadá naše inteligentní smlouva.

Model vozidla & amp; výkonná smlouva o výkonuObrázek U.Today

Jak vydělat token na Ethereum?

Mnoho lidí přitahovalo blockchainový průmysl kvůli nehorázným ziskům na trhu s kryptoměnami na konci roku 2017. To bylo hlavně výsledkem příchodu nového standardu tokenů ERC20, který ke spuštění svých tokenů a zvyšování používalo obrovské množství startupů. peníze na rozvoj. Navzdory poklesu humbuku některé společnosti stále spouštějí své tokeny na Ethereum a prodávají přispěvatelům, což dokazuje, že poptávka stále existuje. Pokud jste vždy snili o vybudování startupu a spuštění svého tokenu, bude tato část velmi zajímavá.

Vytvoření tokenu znamená použití standardu ERC20, který lze rychle vyhledávat. Nezapomeňte nastavit verzi Solidity před samotným standardem. K dispozici bude sada funkcí a několik událostí, které mají zaznamenávat akce do hlavní knihy Ethereum. Mezi funkcemi najdete sadu nezbytných: jednu pro definování celkové zásoby, jednu pro kontrolu zůstatku dané peněženky a jednu pro přenos tokenů mezi peněženkami. Protože Ethereum umožňuje ovládání peněženek z jiných peněženek, najdete také funkce, které definují cílovou peněženku a umožňují zůstatek pro převod a schválení transakce. Uložte to do samostatného souboru.sol.

Je čas nastínit vlastní token. Začněte specifikacemi verze Solidity. Potom importujte rozhraní a připojte jej k nové inteligentní smlouvě pomocí „je“. Jdeme dále:

  • Nejprve načrtněte symbol, název a počet desetinných míst v proměnných. Počet desetinných míst umožňuje uživateli přenášet a ukládat části tokenu, nejběžnější počet desetinných míst je 18. Všechna tato čísla musí být viditelná pro uživatele, takže je zveřejňujeme.

  • Zadruhé definujeme celkovou nabídku. V případě tohoto tutoriálu bude opraven a bude roven jedné miliardě.

  • Za třetí, pojďme vytvořit mapování pro kontrolu zůstatků v peněženkách a povolenek v případě, že adresu bude ovládat jakákoli třetí strana.

  • Za čtvrté nastavíme funkci, která bude spuštěna pouze jednou při nasazení smlouvy (konstruktor), která dá naší adrese všechny tokeny, které vytvoříme.

  • Za páté, musíme vytvořit řadu funkcí, které omezují to, co máme v rozhraní. Celková nabídka bude převzata z proměnné, kterou jsme deklarovali dříve. Zůstatky budou zkontrolovány podle mapování. Přenos bude povolen pouze v případě, že má uživatel nějaké ETH a posílá méně nebo rovnou tomu, co ve skutečnosti má. Ovládání další peněženky se provádí podle dříve definovaného mapování a kontroly povolené částky. Zkontrolujte kód, který jsme dostali níže.

Token UTD ERC20Obrázek U.Today

Jak zahájit inteligentní smlouvu?

Nyní víte, jak kódovat jednoduché inteligentní smlouvy na Solidity. Pokusme se pochopit, jak mohou být spuštěny v síti Ethereum. Nejprve musíme zkompilovat kód. Za tímto účelem můžete buď použít integrovaný kompilátor Remix, nebo to udělat na svém počítači pomocí Truffle framework. Pojďme nejdříve na snadnou trasu.

Než začneme, je nutné, abyste si vytvořili účet Ethereum, pokud jste to dosud neudělali. K tomu doporučujeme použít rozšíření Metamask, které lze nainstalovat na prohlížeče Chrome, Opera, Firefox a Brave. Jakmile vytvoříte peněženku, nezapomeňte uložit počáteční frázi, protože to bude jediný způsob přístupu k peněžence z jiných počítačů nebo v případě, že budete muset přeinstalovat příponu. Výhodou Metamasku je, že můžete přepínat mezi různými sítěmi. To se bude hodit, protože pro experimenty použijeme testovací síť. Otevřete rozšíření a vyberte síť Ropsten. Pak přejděte na faucet a požádejte o ETH, pamatujte, že každá operace s EVM stojí Wei.

Otevřete remix.ethereum.org. Uvidíte kód pro hlasovací lístek – zavřete s ním záložku. Remix má vyhrazený prohlížeč pro soubory.sol a integrovaný kompilátor. V horní části prohlížeče je ikona křížku, která umožňuje vytváření nových souborů. Pojďme vytvořit soubor a zkopírovat naši první chytrou smlouvu s vozidly a jejich výkonem. V pravé části obrazovky uvidíte kompilátor s několika záložkami. Na první kartě vyberte verzi kompilátoru, která odpovídá verzi Solidity, kterou jste zadali, a spusťte proces kompilace. Pokud nedojde k žádným chybám, zobrazí se zpráva o úspěchu. Vyberte druhou záložku a uvidíte sekci, kde byste měli určit vhodné prostředí (v našem případě Web3) a zkontrolovat, zda je vaše adresa správná (měla by sestoupit z Metamasku). Pokud je vše v pořádku, stiskněte tlačítko „nasadit“ a zobrazí se vyskakovací okno od Metamasku s transakcí. Potvrďte to a voila, vaše inteligentní smlouva je nasazena do sítě.

Nyní k něčemu zajímavějšímu. Pokud jste k napsání kódu použili v počítači textový editor, můžete jej nasadit místně pomocí Node.js. Nejprve si jej stáhněte z oficiálních webových stránek nebo nainstalujte pomocí příkazového řádku (Windows) nebo terminálu (OSX). V našem případě použijeme OSX, ale proces je podobný.

Instalace Node.js.Obrázek U.Today

Zadruhé nainstalujte Truffle Solidity framework pomocí ‚npm ​​install ‘.

Instalace TruffleObrázek U.Today

Za třetí vytvořte novou složku a vytvořte repo pomocí příkazu „init“.

Vytvoření lanýžového repoObrázek U.Today

Za čtvrté, nainstalujte HDWalletProvider do tohoto repo také prostřednictvím Node.js.

Instalace HDWalletProviderObrázek U.Today

Zapáté, zkopírujte soubory s rozhraním ERC20 a smlouvou o tokenu do složky „contract“ ve vašem repo. Za šesté, vytvořte následující soubor JavaScript ve složce „Migrace“ v repo.

Soubor nasazení JSObrázek U.Today

Sedmé, musíte upravit konfigurační soubor Truffle. Před tím je však zapotřebí ještě jeden krok. Zadáte mnemotechniku ​​vaší peněženky (kterou jste uložili dříve) a rozhraní API pro testovací síť Ropsten. Chcete-li získat druhou možnost, přejděte na Infura a zaregistrujte projekt. Na stránce projektu uvidíte jeho ID. Použijte jej jako API.

Konfigurace lanýžůObrázek U.Today

Konečně jste připraveni zahájit inteligentní smlouvu. Takto vypadá příkaz a postup. Pokud se vyskytnou nějaké problémy, zobrazí se vám místo nich.

Chytrý kontrakt se nasazuje lokálněObrázek U.Today

Co můžete dělat s inteligentní smlouvou?

Dobrá práce, máte nasazeny první dvě inteligentní smlouvy. Co teď? Pro začátečníky je musíte ověřit a publikovat. Najdeme je nejprve v kterémkoli z blokových průzkumníků Ethereum. Budeme používat Etherscan.

Nejrychlejší způsob přístupu k vašim smlouvám je prostřednictvím transakcí z vaší peněženky. Otevřete Metamask, stiskněte tři tečky a umožní vám zobrazit svůj účet v Etherscan. Vaše adresa má nyní pro vytvoření smlouvy alespoň jednu transakci. Při přístupu k transakci najdete cílovou adresu, která je v zásadě adresou smlouvy. Jakmile skončíte na stránce smlouvy, uvidíte několik karet. Přejděte na kartu „Kód“ a přejděte na ověřovací stránku. Zde zadejte všechny relevantní informace a stisknutím tlačítka spusťte proces ověření.

Ověření kóduObrázek U.Today

Jakmile ověříte první chytrou smlouvu, kterou jsme vytvořili, můžete s ní nyní komunikovat. Přejděte na kartu „Napsat smlouvu“ a uvidíte zástupné symboly, které jsme určili. Pojďme připojit Etherscan k Metamasku a přidejme Toyota Soarer a 280 HP. Obnovte stránku a data se zobrazí v sekci „Číst“.

Inteligentní smlouva fungujeObrázek U.Today

souhrn

Stručně řečeno, vytváření inteligentních kontraktů je nezbytnou dovedností pro každého inženýra blockchainu. První platformou, která zavedla inteligentní smlouvy, bylo Ethereum; nadace také komunitě představila speciálně psaný jazyk nazvaný Solidity. Navzdory novosti konceptu a samotného jazyka nemá budování inteligentních smluv nic výjimečného. Lidé, kteří mají předchozí zkušenosti s objektově orientovanými programovacími jazyky, zejména s JavaScriptem, se budou cítit velmi dobře.

Inteligentní smlouvy jsou jen programy, ale mají charakteristické rysy, na které by měl každý vývojář pamatovat. Například proto, že inteligentní kontrakty běží na decentralizovaném virtuálním počítači, jejich data se neměnně zaznamenávají do blockchainu. Proto zde není prostor pro chyby a testování inteligentní smlouvy je zásadní, než bude nasazena do hlavní sítě. Další charakteristikou inteligentní smlouvy je, že každá akce se provádí prostřednictvím transakcí, které vyžadují výpočetní sílu EVM. V důsledku toho stojí nasazení inteligentních smluv a interakce s nimi peníze.

Dnes jsme vysvětlili principy fungování sítě Ethereum Main a testovacích sítí, ukázali vám různé nástroje pro vytváření inteligentních kontraktů a nastínili proces vytváření dvou typů kontraktů. Rovněž jsme předvedli různé způsoby spouštění inteligentních smluv v síti a další interakce s nimi. Věříme, že s touto znalostí budete připraveni začít jako blockchainový inženýr a na jejich základě budovat výjimečné chytré smlouvy a decentralizované aplikace. Užívat si!