Budování na blockchainu zahrnuje posun paradigmatu od tradičního programování a vyžaduje důkladné pochopení decentralizovaného modelu blockchainu. Vývojáři Smart Contract mají k dispozici specifickou sadu funkcí pro vývoj decentralizovaných aplikací (DApps). Musí na první pokus vytvořit zabezpečenou DApp. V tomto článku si vysvětlíme rozdíly mezi vývojem běžných aplikací a blockchainových aplikací. Podíváme se na skript napsaný v Aiken a SC napsaný v Solidity.
Jak se liší budování na blockchainu?
Hlavním rozdílem mezi běžnými programovacími jazyky a blockchainovými jazyky jsou jejich případy použití a principy návrhu. Běžné programovací jazyky jsou univerzální a lze je použít k vývoji široké škály aplikací. Na druhou stranu jsou blockchainové jazyky často navrženy se specifickými funkcemi pro podporu vývoje decentralizovaných aplikací (DApps) a Smart Contracts (SC).
Vývojáři používající tradiční programovací jazyky mají k dispozici obrovské množství knihoven, které jim umožňují napsat téměř cokoliv. Tyto knihovny, vyvíjené po mnoho let globální komunitou vývojářů, poskytují předem napsaný kód pro širokou škálu funkcí od zpracování I/O souborů až po složité algoritmy strojového učení. Tento rozsáhlý ekosystém knihoven umožňuje vývojářům vytvářet aplikace rychle a efektivně, aniž by museli znovu objevovat kolo.
Nicméně, pokud jde o vývoj blockchainu, krajina je zcela odlišná. Blockchainové programovací jazyky jako Solidity pro Ethereum nebo Plutus pro Cardano, přestože jsou výkonné, nemají k dispozici stejnou šíři a hloubku knihoven. To je částečně způsobeno relativní novostí technologie blockchain a specifickými požadavky na psaní chytrých smluv.
Blockchainové programovací jazyky jsou navrženy se specifickým zaměřením na kryptografii a manipulaci s fondy. Dále to může být vytvoření nového typu tokenu, definování kontroly nad tokeny, podmínky přenosu atd.
Vývojáři, kteří píší SC, mají kontrolu nad logikou a pravidly zakódovanými v těchto smlouvách. Nemají však kontrolu nad určitými aspekty samotné blockchainové sítě.
Vývojáři například nemohou kontrolovat propustnost sítě, což je rychlost, jakou jsou transakce zpracovávány a přidávány do blockchainu. To je určeno různými faktory, jako je síťový protokol, počet uzlů a použitý konsensuální algoritmus.
Podobně vývojáři nemohou kontrolovat nebo bránit potenciální manipulaci s bloky ze strany výrobců bloků. Integrita produkce bloků je udržována základním konsensuálním algoritmem a síťovými pravidly blockchainu.
Zatímco vývojáři mohou diktovat chování svých SC, jejich exekuce je závislá (a může být omezena) na blockchainové síti.
Toto oddělení zájmů je základním aspektem decentralizované povahy technologie blockchain. Zajišťuje, že žádná strana nemá úplnou kontrolu nad všemi aspekty blockchainové sítě, čímž se zvyšuje její bezpečnost a důvěryhodnost. Přestože se jedná o žádanou vlastnost blockchainu, někteří vývojáři se mohou cítit poněkud omezeni nebo závislí na vnějších faktorech.
Při vývoji blockchainu se kód spouští v decentralizované síti a musí dodržovat omezení protokolu blockchainu. Například každá operace v SC stojí určité množství „gasu“ a vývojáři musí své smlouvy sepsat tak, aby byly co nejúčinnější. To často znamená, že chytré smlouvy jsou ve svém stylu kódování spíše nízkoúrovňové a explicitní.
Navíc, jakmile je chytrá smlouva nasazena na blockchain, nelze ji změnit. Tato neměnnost je základním rysem technologie blockchain, ale také to znamená, že vývojáři musí získat svůj kód správně hned napoprvé.
Není zde prostor pro chyby nebo bezpečnostní slabiny, protože je nelze později opravit. Proto proces vývoje chytrých kontraktů často zahrnuje přísné testování a audit. Díky tomu je vývoj DApps delší a dražší.
Přestože je pro nové vývojáře výzvou pochopit všechna úskalí programování na blockchainu, decentralizovaný model může představovat další úskalí.
Vývoj běžných aplikací často zahrnuje vytvoření centralizovaného systému, kde má nad daty a funkcemi kontrolu jedna entita. To je v příkrém rozporu s blockchainovými aplikacemi, které fungují na decentralizovaném modelu. V tomto modelu nemá žádná jednotlivá entita kontrolu nad celou sítí. Místo toho je řízení rozděleno mezi síť uzlů.
SC jsou základní součástí blockchainových aplikací. Jsou to samovykonatelné smlouvy s podmínkami smlouvy přímo zapsanými v kódu. Automaticky provádějí transakce podle předem stanovených pravidel, aniž by potřebovali prostředníka. Tato automatizace snižuje riziko lidské chyby a podvodu.
Vzhledem k tomu, že není prostor pro chyby, musí SC udělat přesně to, co se od něj za daných podmínek očekává. Žádná třetí osoba nesmí mít možnost ovlivnit výkon SC nebo jej zastavit. Kód je zákon. Pokud se provedení SC nezdaří a dojde k neočekávané chybě, obvykle neexistuje způsob, jak ztracené prostředky zachránit.
Dalším specifikem vývoje DApp je, že pokud vývojář dobře zná jedno prostředí, jako je Ethereum, nemusí být vůbec připraven vyvíjet na Cardano. SC platformy se mohou od sebe zásadně lišit.
Pro vývojáře je obtížné přejít na novou platformu
Vývojáři si musí být vědomi významných rozdílů mezi SC platformami, protože tyto rozdíly mohou výrazně ovlivnit design, funkčnost a zabezpečení jejich aplikací. Podívejme se například na rozdíly mezi stavem a souběžností.
Dvě prominentní platformy SC, Ethereum a Cardano, poskytují vynikající příklady toho, jak se tyto rozdíly mohou projevit, zejména pokud jde o manipulaci se stavem a souběžnost.
Ethereum funguje na modelu založeném na účtu. V tomto modelu sdílí celá síť globální stav, který je aktualizován s každým vytvořeným blokem. Tento globální stav zahrnuje zůstatky účtů a stavy inteligentních smluv.
Model Ethereum umožňuje více uživatelům interakci s jednou inteligentní smlouvou v rámci jednoho bloku. Tento sdílený proměnlivý stav však může vést ke složitosti a potenciálním zranitelnostem, zejména pokud jde o souběžnost. Souběžnost v tomto kontextu znamená schopnost provádět více transakcí současně. Pokud se s tím nebude zacházet správně, může to vést k závodům o zdroje (race conditions) a dalším chybám zabezpečení.
Na druhou stranu Cardano používá model Extended Unspent Transaction Output (EUTxO). V tomto modelu se odesílání a přijímání finančních prostředků neukládá jako zůstatek, ale jako nevyčerpané transakční částky (UTxO), které jsou spojeny s adresami peněženky. Tyto UTxO lze utratit pouze jednou.
Tento model ze své podstaty zpracovává souběžnost, protože každý transakční výstup lze utratit pouze jednou a jakmile je utracen, nemůže být použit jinou transakcí. To však také znamená, že vývojáři musí přemýšlet jinak o tom, jak navrhují své chytré smlouvy a nakládají se stavem.
Pochopení těchto rozdílů je pro vývojáře zásadní, aby se vyhnuli chybám a zranitelnostem v jejich smart kontraktech. Například reentrancy je běžná chyba zabezpečení v Ethereum SC, kde útočník může opakovaně volat funkci před dokončením prvního volání funkce. To je v Cardano méně znepokojivé kvůli jeho modelu EUTxO.
Zatímco Ethereum a Cardano nabízejí výkonné platformy pro vývoj decentralizovaných aplikací, každý z nich má své vlastní jedinečné přístupy k zacházení se stavem a souběžností. Vývojáři musí porozumět těmto rozdílům a důsledkům, které mají pro vývoj inteligentních smluv, aby na těchto platformách efektivně budovali bezpečné a efektivní aplikace.
Vývojáři, kteří dobře rozumí Solidity, nemohou snadno přejít na Cardano. Kromě toho, že se musí naučit nový programovací jazyk (Plutus, Aiken atd.), musí se vypořádat i se specifickými vlastnostmi daného blockchainu. Totéž platí například při migraci na Solana.
Přechod z jedné blockchainové platformy na druhou zahrnuje více než jen učení se nového programovacího jazyka. Každá platforma má svou vlastní jedinečnou architekturu, mechanismus konsensu, transakční model, model účtu a funkcionalitu inteligentní smlouvy.
Například přechod z Javy na C# může být pro vývojáře jednodušší, pokud již mají zkušenosti s pojmy jako práce s internetem, databázemi, cloudovými službami, souborovými systémy atd.
Aiken
Aiken je funkční programovací jazyk používaný pro psaní skriptů (inteligentních smluv) pro Cardano.
Na obrázku vidíte velmi jednoduchý skript validátoru. Skript kontroluje, zda jsou splněny podmínky pro útratu.
Utrácející musí uvést podpis a řetězec ‘Hello, World!’. Pokud ano, návratová hodnota skriptu je True. To umožní utracení finančních prostředků.
Check out the functions available to developers.
Vývojáři mohou mimo jiné používat bajtová pole a porovnávat je mezi sebou, používat několik hashovacích funkcí (blake2b_256, sha2_256 a sha3_256), pracovat s časovým intervalem, provádět základní aritmetické funkce, pracovat s řetězci atd.
Pokud jde o funkce, které více souvisí s blockchainem, vývojáři mohou pracovat s adresami, certifikáty a transakcemi. Dále mohou pracovat s hodnotami ADA coinů a tokenů atp.
Aplikace DApp pro Cardano vyžaduje vytvoření on-chain části a off-chaoin části. Aiken je určen pouze pro on-chain část na řetězu. Vývojáři mohou k vytvoření off-chain části použít jakýkoli vhodný programovací jazyk.
V Cardano jsou chytré smlouvy napsané v Aiken nebo Plutus často menší, protože se v podstatě jedná o ověřovací skripty, které určují, zda je transakce platná. Fungují na modelu UTXO, kde každý transakční výstup nese malý kousek logiky (smlouvu) pro ověření jakékoli transakce, která se jej pokusí utratit.
Na druhou stranu, chytré smlouvy Ethereum, napsané v Solidity, jsou stavové aplikace, které žijí na blockchainu a obvykle mají vyšší úroveň složitosti. Fungují na modelu založeném na účtu, kde smlouvy mají trvalý stav uložený v blockchainu a funkce, které mohou tento stav změnit.
Na obrázku níže můžete vidět příklad smlouvy, která spravuje vlastnictví digitálních tokenů a umožňuje převádět tyto tokeny mezi držiteli tokenů.
První 4 řádky smlouvy představují stav, který je uložen v blockchainu.
Aplikace pro malé podniky napsaná v tradičním objektově orientovaném programovacím jazyce může mít tisíce řádků kódu, zatímco podniková aplikace může mít klidně desítky až stovky tisíc řádků zdrojového kódu. Například Boeing 787 má za svými systémy avioniky a online podpory 6,5 milionu řádek.
Pokud jde o řádky kódu, DApps jsou malé ve srovnání s běžnými aplikacemi. Jednoduchá aplikace DApp může obsahovat několik inteligentních smluv, z nichž každá se skládá z několika desítek až několika set řádků kódu. Složitější DApps, jako jsou decentralizované burzy nebo půjčovací platformy, se mohou skládat z více chytrých smluv s tisíci řádky kódu.
Závěr
Budování DApps je nový lukrativní obor, který každým rokem přitahuje stále více vývojářů. Mohou poskytovat stále efektivnější a uživatelsky přívětivější DApps, přestože musí překonat všechna úskalí decentralizace a specifika vývoje na blockchainu. Vývoj her a aplikací například pro mobilní telefony je vysoce konkurenční a nasycený. V blockchainovém průmyslu může být pro tým mnohem jednodušší prosadit se a stát se dominantním hráčem v oboru. Je to lákavé.
Článek napsali Cardanians s podporou od Cexplorer.
Přečtěte si celý článek: https://cexplorer.io/article/what-makes-development-on-blockchain-different
1 post - 1 participant