Post Język programowania Master Solidity w 5 minut: szkielet inteligentnych kontraktów Ethereum pojawił się jako pierwszy w Coinpedia Fintech News

Wstęp:

Czy zastanawiałeś się kiedyś, jak eskalacja w branży blockchain całkowicie zmieniła nasze spojrzenie na zasoby cyfrowe? Rozwój ten nie byłby możliwy bez Ethereum, globalnej platformy typu open source dla zdecentralizowanych aplikacji (dApps). Jest kamieniem węgielnym rodzimej kryptowaluty Ether (ETH).

Ether (ETH) to druga co do wielkości kryptowaluta na świecie, z obecnym limitem wynoszącym 404,86 miliarda dolarów po Bitcoinie (BTC). Jest również znany ze swojej metody walidacji dowodu stawki. Ethereum jest dostępne dla każdego, kto szuka skalowalnej, programowalnej i zdecentralizowanej bezpiecznej platformy.

Podstawowy potencjał Ethereum leży w podstawowym języku inteligentnych kontraktów: solidności. Zagłębmy się w zrozumienie podstaw Solidity. 

Wprowadzenie do Solidności:

Czym jest Solidność?

Solidność jest dominującym językiem wprowadzonym przez Ethereum do tworzenia inteligentnych kontraktów. Jest to język wysokiego poziomu, zorientowany obiektowo, ze statycznym typowaniem, przeznaczony do inteligentnych kontraktów. Solidność to stosunkowo nowy język, zaprezentowany przez Gavina Wooda w 2014 roku, a później opracowany pod kierunkiem Christiana Reitwiessnera i Alexa Beregszasziego. Mimo że jest nowy, stał się ulubionym językiem programistów Ethereum.

Jego kluczowe cechy są następujące: obsługuje wielokrotne dziedziczenie wraz z linearyzacją C3, złożone typy danych zdefiniowane przez użytkownika, biblioteki, a nawet dziedziczenie, a także wprowadza interferencję binarną (ABI) aplikacji, która zapewnia bezpieczeństwo typów i zawiera specyfikację języka naturalnego .

Dlaczego Solidity dla Ethereum?

Solidity ma podobieństwa z językami takimi jak C++, JavaScript i Python i działa na maszynie wirtualnej Ethereum (EVM) hostowanej w węzłach Ethereum podłączonych do łańcucha bloków. Jest niezwykle użyteczny i umożliwia tworzenie przemysłowych, korzystnych i silnych aplikacji, które obsługują biblioteki zdefiniowane przez użytkownika i dziedziczenie. Zapewnia bezproblemowe wdrażanie i realizację kontraktów w Węzłach Ethereum. 

Maszyna wirtualna Ethereum służy przede wszystkim jako środowisko wykonawcze dla inteligentnych kontraktów. Jest wykorzystywany i koncentruje się na zapewnieniu bezpieczeństwa i implementacji niezaufanego kodu za pośrednictwem międzynarodowej sieci węzłów publicznych.

Solidity kompiluje kody bajtowe Ethereum uruchamiane przez EVM. Koncentruje się na zapobieganiu atakom typu Denial-of-Service i gwarantuje, że programy nie mają wzajemnego dostępu do swoich stanów, potwierdzając również hamowanie wszelkich wnioskowań.

Składnia i struktura solidności

Podstawowa składnia

Języki takie jak C++, JavaScript i Python wpływają na solidność. Solidity używa składni podobnej do ECMAScript, ale ma statyczne pisanie. Językiem implementacyjnym używanym w Solidity był C++. Ma imperatyw paradygmat wymagający, aby funkcje były kodowane niejawnie na każdym kroku. 

Zawiera typowe struktury danych, takie jak mapowania, tablice i inne typy danych, takie jak liczby całkowite, wartości logiczne i adresy, które obsługują oops i niestandardowe struktury. Funkcje to podstawowe bloki języka, które mogą modyfikować zmienne stanu i mają typy zwracane.

Struktura umowy solidności

Inteligentny kontrakt rozpoczynamy od preambuły, która definiuje wersję pragma solidity, która deklaruje wersję kompilatora solidności użytego w kodzie i zawiera nazwę kontraktu. Po drugie, słowo kluczowe kontraktu określa, w jaki sposób fragment kodu powinien zaczynać się od określenia umowy, której podlega kod. 

Kontrakty można uznać za analogiczne do klas w OOP. Każdy kontrakt zawiera następujące deklaracje zmiennych stanu: funkcje z typami i metodami zwracanymi, modyfikatory, zdarzenia, typy strukturalne, wyliczenia i błędy. 

Każda podczęść kodu ma swoją funkcjonalność. Zmienne stanu służą do przechowywania danych kontraktu, funkcje służą do definiowania zachowania, zdarzenia służą do komunikacji pomiędzy kontraktem a funkcjami zewnętrznymi, a modyfikatory służą do narzucania reguł.

Pisanie prostego inteligentnego kontraktu w Solidity

Konfigurowanie środowiska programistycznego

Inteligentną umowę Solidity można wdrożyć zarówno w trybie offline, jak i online

  • Tryb offline: Aby uruchomić solidność w trybie offline, musisz mieć w swoim systemie Node.js, trufle global i ganache-cli. Następnie możesz wdrożyć inteligentne kontrakty, utworzyć projekt truflowy i wchodzić w interakcję za pomocą konsoli truflowej

  • Tryb online: Remix IDE służy do kompilowania i uruchamiania inteligentnych kontraktów. Oto kroki, jakie należy wykonać:

  1. Zacznij od  Remix IDE, ustaw środowisko i utwórz nowy plik

  2. Utwórz inteligentny kod kontraktu i skompiluj go

  3. Wdróż i uruchom kod 

  4. Debugowanie i wywołanie metody

 Przykład prostej umowy solidności

//Pragma solidity>=0.4.22///tytuł umowy///authorcontract Storage{  uint256 dane prywatne;    Zestaw funkcji (uint256 _data) public{      data=_data; }  Funkcja get() widok publiczny zwraca (uint256){      Zwróć dane; }}

Zajmijmy się prostym przykładem umowy Solidity:

Skrawek:

Powyższy fragment kodu pozwala użytkownikowi przechowywać pojedynczą liczbę całkowitą bez znaku. W tym przypadku funkcja set przechowuje dane, a funkcja get je pobiera. Możesz wypróbować takie krótkie i proste przykłady, aby rozpocząć swoją podróż w tej domenie.

Zaawansowane funkcje w Solidity

Dziedziczenie i biblioteki

Oprócz przejrzystego sposobu pisania umów, cechą wyróżniającą Solidity jest dziedziczenie. Dziedziczenie odnosi się do używania klas lub dziedziczenia właściwości klasy w OOPS. Podobnie umożliwia użytkownikom dziedziczenie właściwości i metod jednego kontraktu w innym. To sprawia, że ​​kod jest bardziej czytelny, sprawia, że ​​pisanie jest czystsze i zwiększa się możliwość ponownego użycia kodu. Biblioteki w Solidity są dobrodziejstwem, ponieważ pomagają zorganizować sposób reprezentowania kodu, umożliwiając odpowiednie modyfikacje w celu jego modularyzacji.

Najlepsze praktyki w zakresie bezpieczeństwa

Bezpieczeństwo jest kluczowe podczas pisania inteligentnych kontraktów. Istnieje kilka typowych luk w zabezpieczeniach, takich jak ataki ponownego wejścia i przepełnienie liczb całkowitych. Atak ponownego wejścia ma miejsce, gdy kod jest podatny na wykorzystanie, gdy funkcja wykonuje wywołanie zewnętrzne, zanim zaktualizuje swój własny stan. W związku z tym pozwala zewnętrznemu elementowi umowy ponownie wejść do funkcji i interweniować w działaniach takich jak wycofywanie się, poprzez ich powtarzanie.

Inną luką jest dobrze znana, powodująca kłopoty przepełnienie liczby całkowitej, która występuje, gdy wynik operacji przekracza maksymalny limit, jaki może zawierać przypisany typ danych. Dlatego też, aby przezwyciężyć te problemy, najlepszą praktyką byłoby użycie biblioteki SafeMath, przeprowadzenie dokładnych audytów i wdrożenie wzorców kontroli-efektów-interakcji.

Najnowsze praktyki, które skutecznie zapewniają bezpieczeństwo, to Simple Designs of Contracts oraz Fuzz Testing, który brzmi nieco niekonwencjonalnie, ale losowe testowanie danych pomaga w odnalezieniu ukrytych problemów. Ponadto jednym strategicznym posunięciem byłoby posiadanie programów dużych nagród, w ramach których społeczność bezpieczeństwa wnosiłaby wkład i naprawiała błędy oraz oferowała duże nagrody. 

Opracowywanie i wdrażanie kontraktów Solidity

Przepływ prac programistycznych

Poniżej przedstawiono przepływ pracy:

  1. Konceptualizacja pomysłu: Deweloper powinien opracować jasny cel umowy.

  2. Pisz kontrakty: pisz czysty, czytelny kod, używając IDE, takich jak Remix IDE, Truffle lub Hardhat.

  3. Testowanie: Użyj odpowiednich frameworków testowych w IDE

  4. Debugowanie: Debuguj kod pod kątem wszelkich problemów i sprawdź, czy kod działa zgodnie z oczekiwaniami.

  5. Kontrola bezpieczeństwa: Sprawdź, czy nie ma żadnych luk w zabezpieczeniach, korzystając z narzędzi bezpieczeństwa, takich jak MythX.

  6. Wdrożenie: Na koniec wdroż kontrakt i zapewnij bezproblemową integrację

Wdrożenie w sieci Ethereum

Wdrożenie inteligentnych kontraktów wymaga dużej uwagi dotyczącej precyzji kodu. Dlatego przed interakcją z siecią główną najpierw wdrażamy nasz inteligentny kontrakt w sieciach testowych Ethereum, takich jak Robstan, Kovan lub Rinkben. Pozwalają nam znaleźć i naprawić błędy w kodzie. Nowszą siecią testową jest Goerli, która została wprowadzona w 2018 roku i wykorzystuje mechanizm konsensusu potwierdzającego władzę

 Po sfinalizowaniu umowy możesz wdrożyć ją w sieci głównej. Wdrożenie w sieci głównej wymaga opłat za gaz w Ether (ETH). Dlatego konieczne jest posiadanie dokładnego kodu bez rozbieżności. Platformy takie jak Infura i Metamask udostępniają interfejsy API i usługi portfela. Zatem po wdrożeniu kontrakty będą niezmienne i publiczne.

Alternatywą dla konwencjonalnych IDE Trufle i hardhat jest Brownie, który zapewnia interfejs wiersza poleceń i interaktywną konsolę oraz wykorzystuje pytest, dlatego dla programistów zaznajomionych z Pythonem Brownie z pewnością dodaje punkty brownie!

Przyszłość inteligentnych kontraktów Solidity i Ethereum

Ewolucja Solidności

Solidność ewoluowała niesamowicie. Obecnie koncentrujemy się na aktualizacjach zabezpieczeń, wydajności i możliwości ponownego użycia. Duża społeczność stojąca za tą ewolucją stale udoskonala i przyczynia się do doprowadzenia Solidity tam, gdzie jest dzisiaj. 

W wielu krajach rozwija się także ekosystem deweloperski. Aby zostać programistą Solidity, potrzebujesz solidnych podstaw programowania.

Trendy i innowacje

Najnowsze trendy w Solidity to rozwój inteligentnych kontraktów, w tym rozwiązań warstwy 2, interoperacyjność między łańcuchami i integracja sztucznej inteligencji. Ta innowacja zrewolucjonizowała branżę blockchain i rozwój dApps.

Oprócz skupienia się na zwiększeniu analizy programu i poprawie poprawności, badacze zamierzają zintegrować w Solidity zaawansowane schematy kryptograficzne, takie jak protokół e-głosowania TAVS. Aby poprawić użyteczność i rozwiązać analizę opartą na bajtach, opracowywane są nowe narzędzia, takie jak SolSEE.

Wniosek

Podsumowując, Solidity jest filarem rozwoju Ethereum i inteligentnych kontraktów. Zapewnia bezpieczną, niezawodną i dobrze zbudowaną platformę do tworzenia dApps. Ponieważ technologia blockchain nadal zyskuje na popularności w branży, Solidity, będąc jej pionierem, pozostaje jednym z najsilniejszych czynników przyczyniających się do wzrostu. Przygotuj więc wszystko i wejdź na arenę zdecentralizowanej przyszłości!

Przeczytaj także: Kryptografia 101: klucz do rozwoju Blockchain dla początkujących