Przewodnik blockchain development – języki programowania i sieci
Blockchain to technologia, o której dużo się teraz mówi, ale wchodząc w nią głębiej, szybko odkryjemy, że nie wystarczy po prostu “robić blockchain”. Istnieje tu bowiem mnóstwo ekosystemów, rodzajów tech stacków i języków programowania, które przydają się na konkretnych sieciach. Jeśli zastanawiacie się, jak wejść w ten świat, przybliżamy.
Choć blockchainy coraz częściej komunikują się ze sobą, technicznie to osobne wyspy, na których panują inne zasady i które programuje się innymi językami. Są więc takie, które mają niższy próg wejścia dla programisty, jak i te stworzone z użyciem nowych języków, które miały służyć konkretnym potrzebom, ale wymagają też co najmniej paru miesięcy nauki.
Blockchain to dla programistów nowe, ciekawe wyzwania, które nie są trywialne do zrozumienia, ale mając trochę czasu i chęci, spokojnie można zacząć pisać własny kod. Praca z blockchainem to też nie zawsze smart kontrakty, a częściej tworzenie aplikacji, które korzystają z API konkretnych łańcuchów i kryptowalut.
Jeśli czujesz, że w tematach, którymi zajmujesz się na co dzień, nie uczysz się już tak dużo, jak kiedyś, blockchain jest na pewno dobrym wyborem, żeby dalej się rozwijać. Liczba programistów blockchainowych stale przybywa, ale nadal jest to bardzo niszowa specjalizacja. W 2021 roku na całym świecie było około 26 milionów programistów. Blockchainem zajmuje się aktualnie zaledwie 18 tysięcy z nich – tyle osób każdego miesiąca jest aktywnych w repozytoriach projektów blockchainowych – a więc sporo poniżej 1 proc.
Spójrzmy więc na sieci, które są obecnie najpopularniejsze wśród developerów i języki, których wymagają.
Jakich języków używa się w blockchainach?
Źródło: Electric Capital
Ethereum – Solidity
ok. 4000 programistów
Ojcem kryptowalut jest Bitcoin, ale matką wszystkich zdecentralizowanych aplikacji jest raczej stworzone w 2015 roku Ethereum. To Ethereum jest najpopularniejszą platformą do smart contractów, DeFi i większości zastosowań blockchainu.
5 lat w technologii to sporo i Ethereum słabo zniosło próbę czasu pod względem skalowalności samej technologii, a koszty transakcji sprawiają, że używanie ETH ma sens tylko przy większych kwotach. Twórcy pracują nad wdrożeniem nowych mechanizmów, które mają je znacznie usprawnić, choć termin tzw. Merge, po którym Ethereum przejdzie z konsensusu PoW na PoS (Proof of Stake) wciąż się opóźnia. Ethereum jest jednak ogromnie popularne wśród twórców aplikacji i programistów, ma dużą społeczność, jest mocno zdecentralizowane, dzięki czemu bezpieczne, a dostęp do materiałów do nauki jest naprawdę spory.
Ethereum programuje się z wykorzystaniem Solidity, czyli języka stworzonego specjalnie do obsługi EVM (Ethereum Virtual Machine). Solidity bywa całkiem słusznie krytykowane za poziom skomplikowania przy audytach. Nie jest trudno się go nauczyć, ale z uwagi na kompletność Turinga, ciężko dotrzeć do wszystkich potencjalnych i oczywistych błędów.
Solidity będzie dość znajome dla obecnych web developerów, ale z uwagi na wspomniane problemy, trzeba być naprawdę doświadczonym programistą, żeby działać na odpowiednio wysokim poziomie. Wiele osób, które twierdzą, że znają Solidity, niestety sobie z nim nie radzi, a w świecie crypto kwestie związane z bezpieczeństwem są ogromnie ważne, ponieważ działamy na aktywach, które mają swoją–często niemałą wartość finansową.
Polygon – Solidity
ok. 350 programistów
Polygon to tzw. layer 2 w kontekście Ethereum. Cały koncept L2 polega na tym, by korzystać z głównej sieci (L1, w tym przypadku Ethereum) tylko w razie konieczności. Polygon jest znacznie szybszy od Ethereum i ma znacznie tańsze transakcje. Jednocześnie korzysta z EVM i “wpina się” w Ethereum, korzystając z jego zdecentralizowania. Polygon korzysta też z zupełnie innego protokołu konsensusu – nie trzeba go “kopać”, jak w Bitcoinie i Ethereum z Proof of Work, a zamiast tego sieć operuje na Proof of Stake (PoS), który jest utrzymywany przez walidatorów i osoby, które wykonują tzw. staking – przekazują swoje tokeny walidatorom. W systemach PoS tworzenie nowych bloków zależne jest od ilości tokenów kontrolowanych przez walidatorów, a nie mocy obliczeniowej/energii jak w PoW.
Polygona można więc wykorzystać do tworzenia dokładnie tych samych aplikacji, co Ethereum, ale skorzystamy z bardziej nowoczesnego zaplecza. Podam przykład–na Ethereum, wykonanie 100 płatności po $100 kosztowałoby $3000. To 30% samych kosztów transakcji, które traci na znaczeniu, dopiero kiedy operujemy na dużych kwotach. Tę samą transakcję możemy przeprowadzić, konwertując całą kwotę z ETH na token Polygona, MATIC, wykonać wszystkie 100 operacji na Polygonie, a następnie wrócić do ETH. W ten sposób zapłacimy zwykłe transaction fee tylko za wykonanie smart kontraktu konwertującego ETH na MATIC i znowu na ETH, czyli 2x około $30 (zależy od ruchu na sieci). Koszty na MATIC to $0.01 za transakcję. Widzicie różnicę?
Za popularność Polygona odpowiada też dostępność technologii dla programistów Solidity. W końcu oba blockchainy korzystają z tego samego języka i są kompatybilne z EVM.
Algorand – TEAL, Python
ok. 200 programistów
Algorand powstał w odpowiedzi na wszystkie wspomniane problemy Ethereum. Ma znacznie większą przepustowość, ok. 1000 transakcji na sekundę (TPS) kontra ok. 15 TPS na Ethereum; koszty wykonania operacji są znikome, kosztują 0.001 ALGO, czyli obecnie około $0.0007.
Algorand zasłynął z unikalnej architektury stworzonej przez Silvio Micaliego z MIT – jednego z ojców nowoczesnej kryptografii, który zdobył prestiżową nagrodę Turinga. Wspomnieliśmy już czym są systemy PoS, ale Algorand korzysta z wariacji zwanej Pure Proof of Stake. Cała różnica polega na tym, że w PoS, jeśli walidatorzy są stali i nie jest ich wystarczająco dużo, pojawia się zagrożenie współpracy czy przekupienia większości walidatorów w celu weryfikowania niepoprawnych transakcji (51% attack). W ten sposób można by np. dodać do bloku transakcję, która wyczyści Twoje konto, zanim prawidłowa operacja zostanie wykonana lub sprawić, że transakcja zostanie wykonana podwójnie (Double Spend Attack). Algorand jest zabezpieczony przed takimi atakami poprzez–wbudowane w konsensus–niejawne i losowe wybieranie walidatorów, którzy wezmą udział w tworzeniu nowego bloku.
Algorand rozwiązał też problem Solidity, wprowadzając język TEAL, który obsługuje Algorand Virtual Machine (AVM), alternatywę EVM. TEAL nie jest zupełny w sensie Turinga i jest przez to łatwo audytowalny. Programista może łatwo prześledzić kod i zrozumieć jego wynik.
TEAL jest językiem niskopoziomowym podobnym do asemblera. Dzięki temu kod wykonywany na Algorandzie jest bardzo szybki, ale próg wejścia może być wysoki. Na szczęście istnieje też biblioteka PyTEAL, która pozwala obsługiwać AVM za pomocą Pythona – a tego nikomu przedstawiać nie trzeba 🙂
Ulam Labs zostało w zasadzie zbudowane na Pythonie, więc wdrożenie w Algoranda i PyTEAL było dla większości z nas bardzo naturalne. Nadal trzeba zrozumieć specyfikę tego blockchainu, ale dla dobrego Pythonowca nie jest to duża przeszkoda. Być może też dlatego w 2021 roku liczba developerów aktywnych na Algorandzie potroiła się.
Solana – Rust
ok. 900 programistów
Solana jest obecnie jednym z najgorętszych blockchainów, który przyciąga rzesze firm i programistów. Za sukcesem Solany stoi marketing na światowym poziomie i technologia – Solana jest aktualnie najszybszym blockchainem. Jeśli Ethereum obsługuje 15 TPS, a Algorand 1,000 TPS, Solana może osiągać nawet 50,000 TPS. Transakcje potwierdzane są w zaledwie kilka sekund.
Unikalnym elementem Solany jest–a jakże–konsensus. Solana korzysta z czegoś, co przypomina Proof of Stake, ale nazywa się Proof of History. PoH korzysta ze zmiennej czasu i wpisuje w bloki dowód, że od poprzedniego bloku upłynęła określona ilość czasu. W przeciwieństwie do innych blockchainów, PoH sprawia, że komputery utrzymujące sieć (walidatorzy) nie muszą się ciągle komunikować, żeby ustalić wspólny przebieg czasu. Prędkość Solany wynika też więc z możliwości uruchamiania smart kontraktów przez walidatorów równolegle, w tym samym czasie, ponieważ ostatecznie czas i kolejność będą znane.
Jak twierdzą jej twórcy, prędkość tej sieci jest ograniczona tylko przez dostępny hardware, więc jeśli na rynku pojawią się np. jeszcze szybsze karty graficzne, Solana jeszcze przyspieszy. Oczywiście, żadna technologia nie jest idealna – Solana miewa problemy z nadmiernym obciążeniem i przestaje w tym czasie działać. Na razie zdarzyło się to raptem kilka razy, ale problem nie został jeszcze rozwiązany.
Solana ma też specyficzne smart kontrakty, których nie tworzy się do obsługi wirtualnej maszyny, a które pisze się bezpośrednio w łańcuchu w niskopoziomowym Rust. To znaczy, że każdy program trzeba pisać od podstaw i wymaga więcej pracy. Rust jest jednak dobrze znany wielu programistom, więc oni będą mieć ułatwione zadanie.
Dalsza część artykułu znajduje się na kolejnej stronie.
Spis treści
NEAR Protocol – RUST
ok. 400 programistów
Innym RUST-owym blockchainem jest NEAR, który jest już 6 największą siłą pod względem liczby developerów pracujących z tą technologią na co dzień.
NEAR jest chętnie wybierany z podobnych powodów, co Solana. Ma wysoką przepustowość, dzięki autorskiemu podejściu do shardingu zwanym Nightshade Sharding, czyli rozdzielania weryfikacji transakcji pomiędzy walidatorów. W praktyce oznacza to, że fragmenty tego blockchainu są procesowane równolegle, a stopień tej fragmentacji jest ustalany dynamicznie na podstawie obciążenia sieci i zużycia zasobów. O spójność danych dba konsensus TPoS (Thresholded Proof of Stake), który wybiera walidatorów na zasadzie aukcji, ustalając dynamicznie minimalną liczbę tokenów, którą musi kontrolować walidator, żeby brać udział w potwierdzaniu transakcji. Taka architektura pozwala NEAR teoretycznie osiągnąć nawet 1 milion TPS, ale sharding wprowadza też parę komplikacji – największą z nich jest komunikacja pomiędzy shardami. Dlatego też 1 milion TPS brzmi dobrze, ale nie jest do końca porównywalny z przepustowością blockchainów, które osiągają dobre wyniki bez wykorzystania tej techniki, jak np. Solana.
Może wydaje się to nieco skomplikowane, ale NEAR korzysta z dwóch rodzajów konsensusu, gdzie TPoS dba o zgodność między shardami, ale za produkcję bloków odpowiada protokół DoomSlug. Wyróżnia się tym, że za jego pomocą transakcje są potwierdzane po zaledwie jednej rundzie komunikacji między walidatorami – inne blockchainy, jak Ethereum, często wymagają kilku rund i stworzenia kilku bloków, co jak możecie się domyślać, spowalnia proces weryfikacji transakcji.
NEAR jest natywnie kompatybilny z Ethereum, więc osoby z doświadczeniem w Solidity odnajdują się tu od razu, ale Near wspiera też smart contracty natywnie na swojej sieci (Aurora) i te kodujemy w RUST.
Polkadot – Rust, C++, Golang
ok. 1400 programistów
Polkadot była jednym z pierwszych blockchainów identyfikujących się jako “layer 0”. Tak, jak inne wspomniane blockchainy to layer 1 lub 2, tak Polkadot został stworzony z myślą o komunikacji pomiędzy różnymi blockchainami – nie tylko jeśli mówimy o transferze tokenów, ale też samych danych.
Sam koncept jest dość skomplikowany ze względu na unikalną strukturę. Istnieje tu bowiem kilka elementów:
- Relay Chain – główna sieć, która odpowiada za bezpieczeństwo, ogólny konsensus i kompatybilność z innymi blockchainami. Obsługuje około 1,500 TPS i potwierdza transakcje w 60 s.
- Parachains – budowane na Polkadot odrębne blockchainy korzystające z własnych funkcjonalności i tokenów, wszystko w obrębie jednego ekosystemu
- Parathreads – w Polce można stworzyć też blockchainy, które rzadziej komunikują się z siecią główną–z różnych przyczyn, najczęściej ekonomicznych, ponieważ ciągła komunikacja wykorzystuje zasoby sieci, które są skończone. Z punktu widzenia tworzenia aplikacji nie ma jednak dużej róznicy między Parachainem i Parathreadem.
- Bridges – mosty pozwalają wspomnianym Parachainom i Parathreadom komunikować się z innymi sieciami – np. z Ethereum, Bitcoinem itp.
Polkadot wykorzystuje open-source’owy tech stack zwany Substrate. Zakłada on, że kod kompilowany jest do WebAssembly, a przez to może być obsługiwany przez dowolny język, który jest z nim kompatybilny, czyli między innymi Rust, C/C++, C# i TypeScript. Być może dlatego Polkadot jest drugim największym ekosystemem blockchainowym pod względem liczby developerów, zaraz po Ethereum.
Avalanche – Go, TypeScript, Vue, JavaScript, Solidity
ok. 280 programistów
Avalanche został stworzony, by rozwiązać problemy ze skalowalnością Ethereum. To kolejny blockchain, który wykorzystuje sharding w celu zwiększenia przepustowości. Avalanche rozwiązuje jednak problem fragmentacji sieci w związku z shardowaniem poprzez tzw. atomic broadcasts – transakcje są propagowane natychmiastowo po całej sieci, we wszystkich podsieciach.
Avalanche korzysta z trzech rodzajów sieci:
- X-Chain, który służy do zarządzania tokenami i korzysta z konsensusu zwanego Avalanche. Wykorzystuje się go do natychmiastowych transferów tokenów.
- C-Chain, który obsługuje smart contracty. Ma własny konsensus Snowman, który działa podobnie do Avalanche, jednak w liniowym procesie
- P-Chain, który koordynuje pracę walidatorów i również korzysta ze Snowmana.
Wspomniana architektura jest podobna do Algoranda, a więc na osobnej warstwie transferowane są tokeny, zapewniając szybkość transakcji, a na innej wykonywany jest kod smart contractów.
Plusem Avalanche jest prędkość i przepustowość na poziomie 6,500 TPS. Avalanche jest kompatybilne z EVM, więc znając Solidity, można od razu zacząć pracę ze smart kontraktami. Ten blockchain obsługujemy też Go, JavaScript (Typescript/Vue)–szczególnie, jeśli chcielibyśmy integrować wallet z frontendem czy korzystać z API Avalanche.
Cardano – Haskell
ok. 350 programistów
Cardano ma rzeszę wiernych fanów, mimo częstych uwag do powolnych postępów w pracach nad tym blockchainem. Bierze się to jednak z unikalnego podejścia do procesu R&D, który przypomina pracę naukową, a wiele propozycji przechodzi proces peer review, zanim zostaną wdrożone. To sprawia, że wszystkie założenia odnośnie algorytmów muszą najpierw zostać udowodnione na papierze i potwierdzone przez innych ekspertów, a dopiero później wdrożone przez programistów.
Cardano to kolejny blockchain typu PoS, który korzysta z jego własnej odmiany nazwanej Ouroboros. Jednym z ważniejszych elementów tego ekosystemu jest dedykowany portfel Daedalus, za pomocą którego można wykonywać transakcje, ale też przekazywać swój stake walidatorom, przyczyniając się do bezpieczeństwa sieci i zdobywając za to więcej tokenów.
Cardano stara się zmaksymalizować bezpieczeństwo i skalowalność w sposób akademicki, więc nie dziwi fakt używania tu języka Haskell, który jako niskopoziomowy wymaga specyficznego zestawu umiejętności. Według badań Electric Capital, Cardano z liczbą ok. 400 developerów plasuje się mniej więcej na tym samym miejscu pod względem popularności, co NEAR Protocol. W ciągu ostatniego roku ta liczba się podwoiła.
Cosmos – Golang, Ethermint, Rust
ok. 950 programistów
Cosmos jest trzecim najpopularniejszym blockchainem wśród developerów i też jednym ze starszych. Jego początki datują się na 2014, a pierwszy whitepaper ukazał się w 2016. Cosmos Hub, czyli pierwszy blockchain tego systemu został wypuszczony w 2019 roku. Cosmos to blockchain z konsensusem Proof of Stake, który jako jeden z pierwszych proponował możliwość komunikacji pomiędzy wieloma blockchainami i tworzenia nowych.
Cosmos od początku stawiał też na łatwość użycia, więc prawdopodobnie też dlatego cieszy się taką popularnością. Cosmos ma strukturę modułową, więc w dużej mierze można budować na nim, korzystając z gotowych rozwiązań, co znacznie przyspiesza proces.
Cosmos wspiera tworzenie smart kontraktów, które tworzy się wykorzystując Golang – w tym języku została też napisana cała pozostała infrastruktura i Cosmos SDK, z którego można korzystać do tworzenia nowych blockchainów.
Poza tym, Cosmos SDK może korzystać z modułów CosmWASM (WebAssembly), który pozwala pisać w Rust i Ethermint, kopii Solidity. Dzięki temu, można tworzyć aplikacje wykorzystujące jednocześnie Cosmos i Ethereum lub inne blockchainy korzystające z WASM, jak Polkadot.
Flow – Cadence
Flow nie jest tak popularnym ekosystemem, jak wszystkie poprzednie, ale to się dość szybko zmienia – głównie za sprawą specjalizacji. Flow to blockchain dla NFT i zdecentralizowanych gier. Stworzyli go twórcy CryptoKitties – jednej z pierwszych blockchainowych gier, zbudowanej na Ethereum. W pewnym momencie stała się tak popularna, że regularnie przeciążała całe Ethereum.
Twórcy Flow stworzyli więc blockchain, który nadawałby się do gier lepiej, niż Ethereum. Konsensus PoS zapewnia tu tańsze transakcje i szybkie ich procesowanie. Zbudowane na Flow projekty robią wrażenie, pod względem marek. Najpopularniejszą jest NBA Top Shots, oficjalna gra kolekcjonerska NBA, która poważnie przyczyniła się do wybuchu trendu NFT w 2021 roku. Inne marki, które korzystały z flow to UFC, MotoGP, NFL, czy Samsung.
Z technicznego punktu widzenia, Flow korzysta z autorskiego języka Cadence, który przypomina trochę Swift, Kotlin i Rust, więc jeśli macie z którymś z nich doświadczenie, to nie będziecie mieli problemu z rozpoczęciem przygody z Flow. Cadence stawia na bezpieczeństwo, dobrą czytelność kodu i łatwość programowania.
Jak zacząć?
Jak widzicie, blockchain blockchainowi nierówny i każdy służy do czegoś innego. Ich popularność wśród developerów może być jednak mocno zależna od samych developerów – im mniejsze będziecie mieli problemy z wdrożeniem się, tym chętniej wybierzecie ten, czy inny łańcuch. Nie da się jednak nie zauważyć, że Solidity jest jednym z branżowych standardów.
Tylko jeśli faktycznie chcielibyście spróbować sił w blockchainie, jak możecie zacząć? Najprościej od stosunkowo prostych operacji, które nie wymagają od razu tworzenia smart kontraktów. Stworzenie testnetu, forka, a może nawet node’u czy walidatora da wam wgląd w problemy występujące w blockchainie i specyfikę interakcji z nimi, a w kolejnym kroku szybko zaczniecie budować własne smart kontrakty. Na Algorandzie jest to wyjątkowo łatwe i pierwszy kontrakt można napisać nawet w kilka minut.
Wiele aplikacji, które tworzymy w Ulam Labs korzysta też z kryptowalut, ale nie z kontraktów. W takiej sytuacji integrujemy program z portfelem i korzystamy z API blockchainów między innymi do wykonywania transakcji, ale tego typu aplikacje wykorzystują blockchain w dość wąskim zakresie. W pozostałych aspektach są identyczne, jak te, z którymi jako programiści pracujecie na co dzień.
Źródło: Electric Capital
Ważnym aspektem całego świata crypto jest społeczność. W internecie znajdziecie mnóstwo tutoriali, dokumentacji i stworzonych przez społeczność bibliotek, które możecie wykorzystać. W razie pytań, pomocy możecie szukać na stronach projektów, Reddicie i grupach na Telegramie/Discordzie – poza klasycznym Google czy Stack Overflow.
Czy warto? Według nas tak, bo blockchain nadal ma bardzo dużą przestrzeń do rozwoju, a coraz częściej staje się częścią publicznej dyskusji–mówią o nim rządy, firmy i jednostki. Nadal jest też wcześnie, a jako blockchain developerzy macie znacznie mniejszą konkurencję.
Może warto spróbować?
Zdjęcie główne pochodzi z unsplash.com.