Programowanie w łańcuchu bloków: Solidność. Programowanie inteligentnych kontraktów

W ciągu ponad 10 lat swojego rozwoju, blockchain znacznie się rozwinął od prostego systemu przekazywania wartości za pomocą monet do podstawy dla aplikacji Web 3.0 i zdecentralizowanych. Stało się tak głównie z powodu wybuchu nowych projektów po tym, jak Ethereum wprowadziło swój standard ERC20 i inteligentne kontrakty.

Inteligentne kontrakty były szeroko stosowane w pozyskiwaniu funduszy dla ICO, aby zapewnić uczestnikom przejrzystość. To uczyniło ich sławnymi, ale nie była to jedyna realizacja. Istnieją udane przypadki inteligentnych kontraktów w tworzeniu rozproszonych autonomicznych organizacji, zarządzaniu prawami i prowadzeniu ładu. Potrzeba ich jest tak oczywista, że ​​podejmowane są nawet próby stworzenia inteligentnych kontraktów dla Bitcoin.

Jeśli chcesz osiągnąć sukces w inżynierii blockchain, będziesz musiał wiedzieć, jak działają inteligentne kontrakty i jak je budować. Na szczęście Ethereum zapewnia wszystko, co do tego niezbędne, w tym własny język programowania – Solidity. Ten język został stworzony specjalnie do pracy z maszyną wirtualną Ethereum. Jest to dość łatwe do zrozumienia, ale jest kilka charakterystycznych cech, o których musisz pamiętać. Dzisiaj zagłębimy się w świat inteligentnych kontraktów i zakodujemy niektóre z nich. Zaczynajmy!

Jak działa Ethereum?

Przede wszystkim musimy zrozumieć podstawy łańcucha blokowego Ethereum i jego działanie. Pomoże nam to zrozumieć różnicę między kodowaniem aplikacji scentralizowanych i zdecentralizowanych (którymi w zasadzie są inteligentne kontrakty).

W swoim rdzeniu Ethereum ma maszynę wirtualną. Prawdopodobnie napotkałeś je wcześniej podczas uruchamiania starych gier w emulatorze lub uruchamiania oprogramowania specyficznego dla systemu operacyjnego w innym niż natywnym systemie operacyjnym. Mówiąc prościej, maszyna wirtualna to komputer wewnątrz komputera, który wykorzystuje sprzęt oryginalnej maszyny. W przypadku Ethereum EVM wykorzystuje zasoby komputerów podłączonych do sieci (węzły). Jak każda inna maszyna wirtualna, maszyna Ethereum ma własną pamięć RAM i ROM, z których korzystają programy działające na niej. Jedynym znaczącym wyjątkiem jest to, że pamięć ROM EVM jest typu blockchain, więc gdy coś się tam dostanie, nie można jej usunąć.

Dlaczego to jest ważne? Tworzenie inteligentnych kontraktów to niesamowita odpowiedzialność, ponieważ w przypadku luki w zabezpieczeniach pieniądze użytkowników mogą zostać skradzione lub utracone. Chociaż możesz zmienić lub całkowicie zastąpić kod na scentralizowanym serwerze, nie możesz tego zrobić na zdecentralizowanej maszynie wirtualnej. Dodatkowo każda czynność wykonywana w ramach smart kontraktu wymaga wniesienia opłat do sieci. Dlaczego? Ponieważ EVM musi przetworzyć dane zadanie i może to zrobić tylko wykorzystując moc obliczeniową niektórych węzłów. Opłaty nazywane są gazem i są płacone w Gwei, które są podobne do Satoshi Bitcoina.

Jak działa inteligentny kontrakt?

Jeśli kiedykolwiek korzystałeś z Ethereum, to przynajmniej raz wygenerowałeś portfel w sieci. Twój portfel to w zasadzie konto, które jest reprezentowane przez adres. Inteligentna umowa to również konto, ale różni się od zwykłego konta.

Po utworzeniu portfela możesz podłączyć go do dowolnej dostępnej sieci, a jedyną rzeczą, która się zmieni, jest saldo. Dzieje się tak, ponieważ adresy użytkowników nie są wewnętrznymi adresami żadnej sieci – istnieją równolegle. Z drugiej strony instancja inteligentnej umowy jest zawarta w danym łańcuchu bloków i nie można jej wyświetlić w innym łańcuchu. Aby móc uruchomić kontrakt w sieci głównej po przetestowaniu go w, powiedzmy Rinkeby, jego twórca będzie musiał wdrożyć nową instancję kontraktu. Będzie to wymagało ponownej kompilacji kodu źródłowego. Twórca umowy może utworzyć dowolną liczbę wystąpień kodu, o ile ma wystarczającą liczbę ETH, aby zapłacić Gas za interakcję z siecią.

Podobnie jak scentralizowana aplikacja, smart kontrakt ma dedykowane miejsce do przechowywania swoich zasobów i miejsce na kod (wyobraź sobie stronę internetową, którą pobierasz z internetu, będzie miała plik.html i kilka folderów ze zdjęciami i innymi rzeczy). Istnieje również wskazanie, ile ETH ma na koncie kontrakt; ma to kluczowe znaczenie dla różnych przypadków użycia, takich jak zbieranie funduszy, testamenty itp. Pełny schemat przedstawiono na poniższym obrazku.

Ethereum EVM i amp; Schemat portfelaZdjęcie: U.Today

Jak zbudować inteligentny kontrakt?

Teraz, gdy znamy zasady działania Ethereum i jak działają w nim inteligentne kontrakty, możemy je stworzyć samodzielnie. Najpierw będziemy musieli ustawić odpowiednie środowisko. Możesz przejść dwiema ścieżkami, pisząc kod w przeglądarce za pomocą Remix IDE dostarczonego przez Ethereum Foundation lub pobierając wybraną aplikację do kodowania wraz z niektórymi pakietami. Na potrzeby tego samouczka pokażemy Ci zarówno Remix, jak i Atom (uniwersalną aplikację do kodowania na komputery Mac & Windows).

Pierwszy inteligentny kontrakt, który zamierzamy zawrzeć, będzie obejmował nazwy różnych modeli samochodów i ich moc. Chcemy zobaczyć dwa pola wejściowe i dwa pola wyjściowe dla posiadanych wartości. Ponieważ zamierzamy zmienić dane wejściowe, musimy ustawić zmienne dwóch typów: ciąg znaków dla nazw i liczbę całkowitą dla mocy.

Przed naszą umową umieścimy wiersz określający wersję językową, ponieważ pomoże to kompilatorowi w poprawnym dostosowaniu kodu. Kompilacja kodu jest konieczna, ponieważ gdy dojdziemy do etapu wdrożenia, kod zostanie dostosowany do kodu maszynowego, który EVM będzie mógł odczytać i przetworzyć. Ponadto zostanie utworzony interfejs binarny aplikacji, który można będzie dalej wykorzystywać do tworzenia pełnoprawnej zdecentralizowanej aplikacji. Zawsze możesz sprawdzić najnowszą wersję Solidity na jego oficjalnej stronie internetowej. Aby to określić, wpisz „pragma solidity” i wersję po znaku „^”.

Aby ustawić granice naszej umowy, nadajmy jej nazwę, a po niej nawias. Najpierw zadeklarujemy dwie zmienne: „model” i „HP”. Pierwsza będzie ciągiem znaków reprezentujących model samochodu, a druga liczbą całkowitą reprezentującą moc danego modelu samochodu. Istnieją dwie rzeczy, o których należy wspomnieć o zmiennych w kategoriach Solidity. Pierwsza z nich polega na tym, że powinniśmy zadeklarować, czy osoby trzecie powinny mieć możliwość ich oglądania, umieszczając obok nich „publiczne” lub „prywatne”. Ta ostatnia polega na tym, że liczby całkowite w Solidity mogą być ze znakiem lub bez. Liczba całkowita bez znaku może być tylko możliwa i jest zapisywana jako „uint”. Liczba całkowita ze znakiem może być zarówno dodatnia & negatywne i jest zapisane jako „int”.

Po określeniu naszych zmiennych nadszedł czas, aby napisać kilka funkcji, które będzie wykonywał nasz inteligentny kontrakt. Po pierwsze, musimy stworzyć symbole zastępcze dla naszego modelu i HP. Użyjemy kilku ustawionych funkcji publicznych i dołączymy do nich nasze zmienne. Po drugie, musimy nakreślić kilka funkcji get publicznych, które będą zwracać dane wejściowe. Zobacz, jak wygląda nasza inteligentna umowa.

Model pojazdu i inteligentny kontrakt dotyczący mocyZdjęcie: U.Today

Jak zrobić token na Ethereum?

Wiele osób przyciągnęło branżę blockchain ze względu na skandaliczne zyski na rynku kryptowalut pod koniec 2017 roku. Było to głównie wynikiem pojawienia się nowego standardu tokenów ERC20, który wykorzystywała ogromna liczba startupów do uruchamiania swoich tokenów i podnoszenia pieniądze na rozwój. Pomimo spadku szumu niektóre firmy nadal wypuszczają swoje tokeny na Ethereum i sprzedają je współpracownikom, udowadniając, że popyt nadal istnieje. Jeśli zawsze marzyłeś o zbudowaniu startupu i uruchomieniu tokena, ta część będzie bardzo interesująca.

Utworzenie tokena oznacza skorzystanie ze standardu ERC20, który można szybko przeszukać w Google. Nie zapomnij ustawić wersji Solidity przed samym standardem. Będzie zestaw funkcji i kilka zdarzeń, które mają rejestrować działania w księdze Ethereum. Wśród funkcji znajdziesz zestaw niezbędnych funkcji: jedną do określenia całkowitej podaży, jedną do sprawdzania salda danego portfela i jedną do przenoszenia tokenów między portfelami. Ponieważ Ethereum umożliwia kontrolowanie portfeli z innych portfeli, znajdziesz również funkcje, które definiują portfel docelowy i umożliwiają saldo do transferu i zatwierdzają transakcję. Zapisz to w osobnym pliku.sol.

Nadszedł czas, aby nakreślić nasz własny token. Zacznij od specyfikacji wersji Solidity. Następnie zaimportuj interfejs i dołącz go do nowej inteligentnej umowy poprzez „is”. Idąc dalej:

  • Najpierw nakreśl symbol, nazwę i liczbę miejsc po przecinku w zmiennych. Liczba miejsc po przecinku pozwala użytkownikowi na przenoszenie i przechowywanie części tokena, najczęściej jest to 18. Wszystkie z nich będą widoczne dla użytkowników, więc udostępniamy je publicznie.

  • Po drugie, zdefiniujemy całkowitą podaż. W przypadku tego samouczka zostanie on ustalony i będzie równy jednemu miliardowi.

  • Po trzecie, zróbmy mapowania do sprawdzania sald w portfelach i uprawnień na wypadek, gdyby osoba trzecia kontrolowała adres.

  • Po czwarte, ustawimy funkcję, która będzie wykonywana tylko raz po wdrożeniu kontraktu (konstruktor), która poda naszemu adresowi wszystkie tokeny, które utworzymy.

  • Po piąte, musimy stworzyć szereg funkcji, które ograniczają to, co mamy w interfejsie. Całkowita podaż zostanie pobrana ze zmiennej, którą wcześniej zadeklarowaliśmy. Salda zostaną sprawdzone zgodnie z mapowaniem. Transfer będzie dozwolony tylko wtedy, gdy użytkownik ma jakieś ETH i wysyła mniej lub równo to, co faktycznie ma. Kontrolowanie innego portfela będzie odbywać się zgodnie z wcześniej zdefiniowanym mapowaniem i sprawdzanie dozwolonej kwoty. Sprawdź kod, który otrzymaliśmy poniżej.

Token UTD ERC20Zdjęcie: U.Today

Jak uruchomić inteligentny kontrakt?

Wiesz już, jak kodować proste inteligentne kontrakty w Solidity. Spróbujmy zrozumieć, jak można je uruchomić w sieci Ethereum. Najpierw musimy skompilować kod. W tym celu możesz użyć zintegrowanego kompilatora Remix lub zrobić to na swoim komputerze za pomocą frameworka Truffle. Zacznijmy od łatwej trasy.

Zanim zaczniemy, musisz utworzyć konto Ethereum, jeśli jeszcze tego nie zrobiłeś. W tym celu zalecamy użycie rozszerzenia Metamask, które można zainstalować na przeglądarkach Chrome, Opera, Firefox i Brave. Po utworzeniu portfela upewnij się, że zapisałeś frazę początkową, ponieważ będzie to jedyny sposób na dostęp do portfela z innych maszyn lub na wypadek, gdybyś musiał ponownie zainstalować rozszerzenie. Zaletą Metamask jest to, że możesz przełączać się między różnymi sieciami. Będzie to przydatne, ponieważ będziemy używać sieci testowej do naszych eksperymentów. Otwórz rozszerzenie i wybierz sieć Ropsten. Następnie podejdź do kranu i poproś o ETH, pamiętaj, że każda operacja z EVM kosztuje Wei.

Otwórz remix.ethereum.org. Zobaczysz kod do karty do głosowania – zamknij nim zakładkę. Remix ma dedykowaną przeglądarkę plików.sol i zintegrowany kompilator. W górnej części przeglądarki znajduje się ikona krzyżyka, która umożliwia tworzenie nowych plików. Utwórzmy plik i skopiujmy naszą pierwszą inteligentną umowę z pojazdami i ich mocą. W prawej części ekranu zobaczysz kompilator z kilkoma zakładkami. W pierwszej zakładce wybierz wersję kompilatora, która odpowiada wersji Solidity, którą podałeś i rozpocznij proces kompilacji. Jeśli nie ma błędów, zostanie wyświetlony komunikat „sukces”. Wybierz drugą zakładkę, a zobaczysz sekcję, w której powinieneś określić odpowiednie środowisko (w naszym przypadku Web3) i sprawdzić, czy Twój adres jest poprawny (powinien pochodzić z Metamask). Jeśli wszystko jest w porządku, naciśnij „Wdróż”, a otrzymasz wyskakujące okienko z Metamask z transakcją. Potwierdź to i voila, Twój inteligentny kontrakt został wdrożony w sieci.

A teraz coś bardziej interesującego. Jeśli do napisania kodu użyłeś edytora tekstu na swoim komputerze, możesz wdrożyć go lokalnie za pomocą Node.js. Najpierw pobierz go z oficjalnej strony internetowej lub zainstaluj za pomocą wiersza poleceń (Windows) lub terminala (OSX). W naszym przypadku użyjemy OSX, ale proces jest podobny.

Instalowanie Node.js.Zdjęcie: U.Today

Po drugie, zainstaluj Solidity Framework Truffle za pomocą „npm install”.

Instalowanie TruffleZdjęcie: U.Today

Po trzecie, utwórz nowy folder i utwórz repozytorium za pomocą polecenia „init”.

Tworzenie repozytorium TruffleZdjęcie: U.Today

Po czwarte, zainstaluj HDWalletProvider w tym repozytorium również za pośrednictwem Node.js..

Instalowanie HDWalletProviderZdjęcie: U.Today

Po piąte, skopiuj pliki z interfejsem ERC20 i kontraktem na token do folderu „kontrakty” w repozytorium. Po szóste, utwórz następujący plik JavaScript w folderze „Migracje” w repozytorium.

Plik wdrożeniowy JSZdjęcie: U.Today

Po siódme, musisz zmodyfikować plik konfiguracyjny Truffle. Jednak przed wykonaniem tego wymagany jest jeden dodatkowy krok. Wprowadzisz mnemonik swojego portfela (który zapisałeś wcześniej) i API dla Ropsten testnet. Aby zdobyć to drugie, przejdź do Infury i zarejestruj projekt. Na stronie projektu zobaczysz jego identyfikator. Użyj go jako interfejsu API.

Konfiguracja trufliZdjęcie: U.Today

Wreszcie możesz rozpocząć inteligentną umowę. Oto jak wygląda polecenie i proces. W przypadku jakichkolwiek problemów, zamiast tego zostaną Ci one przedstawione.

Inteligentna umowa wdrażana lokalnieZdjęcie: U.Today

Co możesz zrobić dzięki inteligentnej umowie?

Dobra robota, masz wdrożone pierwsze dwa inteligentne kontrakty. Co teraz? Na początek musisz je zweryfikować i opublikować. Znajdźmy je najpierw w dowolnym eksploratorze bloków Ethereum. Będziemy używać Etherscan.

Najszybszym sposobem uzyskania dostępu do kontraktów są transakcje z portfela. Uzyskaj dostęp do Metamask, naciśnij trzy kropki, a pozwoli ci wyświetlić swoje konto w Etherscan. Twój adres ma teraz co najmniej jedną transakcję do utworzenia umowy. Wchodząc do transakcji, znajdziesz adres docelowy, który jest zasadniczo adresem umowy. Gdy znajdziesz się na stronie umowy, zobaczysz kilka zakładek. Przejdź do zakładki „Kod” i przejdź do strony weryfikacji. Tutaj wprowadź wszystkie istotne informacje i naciśnij przycisk, aby rozpocząć proces weryfikacji.

Weryfikacja koduZdjęcie: U.Today

Po zweryfikowaniu pierwszego inteligentnego kontraktu, który stworzyliśmy, możesz teraz wchodzić z nim w interakcję. Przejdź do karty „Napisz umowę”, a zobaczysz określone przez nas symbole zastępcze. Podłączmy Etherscan do Metamask i wprowadźmy Toyotę Soarer i 280 KM. Odśwież stronę, a zobaczysz dane w sekcji „Czytaj”.

Inteligentny kontrakt działaZdjęcie: U.Today

streszczenie

Podsumowując, budowanie inteligentnych kontraktów to umiejętność niezbędna dla każdego inżyniera blockchaina. Pierwszą platformą do wprowadzenia inteligentnych kontraktów był Ethereum; Fundacja przekazała także społeczności specjalnie napisany język zwany Solidity. Mimo nowości koncepcji i samego języka, budowanie inteligentnych kontraktów nie ma w sobie nic wyjątkowego. Osoby, które miały wcześniej doświadczenie z językami programowania zorientowanymi obiektowo, zwłaszcza JavaScript, będą czuły się bardzo swobodnie poruszając się po nich.

Inteligentne kontrakty to tylko programy, ale mają one charakterystyczne cechy, o których powinien pamiętać każdy programista. Na przykład, ponieważ inteligentne kontrakty działają na zdecentralizowanej maszynie wirtualnej, ich dane są niezmiennie zapisywane w łańcuchu bloków. W związku z tym nie ma miejsca na błędy, a testowanie inteligentnego kontraktu ma kluczowe znaczenie przed wdrożeniem go w sieci głównej. Inną cechą inteligentnego kontraktu jest to, że każda czynność jest wykonywana poprzez transakcje, które wymagają mocy obliczeniowej EVM. W konsekwencji wdrażanie inteligentnych kontraktów i interakcja z nimi kosztuje.

Dzisiaj wyjaśniliśmy zasady działania Ethereum Main i sieci testowych, pokazaliśmy różne narzędzia do tworzenia inteligentnych kontraktów oraz nakreśliliśmy proces tworzenia dwóch rodzajów kontraktów. Pokazaliśmy również różne sposoby uruchamiania inteligentnych kontraktów w sieci i dalszej interakcji z nimi. Wierzymy, że dzięki tej wiedzy będziesz gotowy, aby zacząć jako inżynier blockchain i budować na ich podstawie wyjątkowe inteligentne kontrakty i zdecentralizowane aplikacje. Cieszyć się!