Przejdź do głównej treści
Change page

Języki inteligentnych kontraktów

Wspaniałym aspektem Ethereum jest to, że inteligentne kontrakty mogą być programowane przy użyciu języków stosunkowo przyjaznych dla programistów. Jeśli masz doświadczenie z językiem Python lub jakimkolwiek językiem z nawiasami klamrowymi (opens in a new tab), znajdziesz język o znajomej składni.

Dwa najbardziej aktywne i utrzymywane języki to:

  • Solidity
  • Vyper

Remix IDE zapewnia kompleksowe środowisko programistyczne do tworzenia i testowania kontraktów zarówno w Solidity, jak i Vyper. Wypróbuj przeglądarkowe Remix IDE (opens in a new tab), aby zacząć kodować.

Bardziej doświadczeni programiści mogą również chcieć użyć Yul, języka pośredniego dla Wirtualnej Maszyny Ethereum (EVM), lub Yul+, rozszerzenia dla Yul.

Jeśli jesteś ciekawy i lubisz pomagać w testowaniu nowych języków, które wciąż są w fazie intensywnego rozwoju, możesz poeksperymentować z Fe, nowo powstającym językiem inteligentnych kontraktów, który obecnie wciąż jest w powijakach.

Wymagania wstępne

Wcześniejsza znajomość języków programowania, zwłaszcza JavaScript lub Python, może pomóc w zrozumieniu różnic między językami inteligentnych kontraktów. Zalecamy również zrozumienie inteligentnych kontraktów jako koncepcji przed zbytnim zagłębianiem się w porównania języków. Wprowadzenie do inteligentnych kontraktów.

Solidity

  • Zorientowany obiektowo język wysokiego poziomu do implementacji inteligentnych kontraktów.
  • Język z nawiasami klamrowymi, na który największy wpływ miał C++.
  • Statycznie typowany (typ zmiennej jest znany w czasie kompilacji).
  • Obsługuje:
    • Dziedziczenie (możesz rozszerzać inne kontrakty).
    • Biblioteki (możesz tworzyć kod wielokrotnego użytku, który można wywoływać z różnych kontraktów – podobnie jak funkcje statyczne w klasie statycznej w innych obiektowych językach programowania).
    • Złożone typy definiowane przez użytkownika.

Przykładowy kontrakt

Ten przykład powinien dać ci wyobrażenie o tym, jak wygląda składnia kontraktu w Solidity. Bardziej szczegółowy opis funkcji i zmiennych znajdziesz w dokumentacji (opens in a new tab).

Vyper

  • Język programowania w stylu Pythona
  • Silne typowanie
  • Mały i zrozumiały kod kompilatora
  • Wydajne generowanie kodu bajtowego
  • Celowo posiada mniej funkcji niż Solidity, aby kontrakty były bezpieczniejsze i łatwiejsze do audytu. Vyper nie obsługuje:
    • Modyfikatorów
    • Dziedziczenia
    • Wstawek w asemblerze (inline assembly)
    • Przeciążania funkcji
    • Przeciążania operatorów
    • Wywołań rekurencyjnych
    • Pętli o nieskończonej długości
    • Binarnych punktów stałych

Aby uzyskać więcej informacji, przeczytaj uzasadnienie dla języka Vyper (opens in a new tab).

Przykład

Ten przykład powinien dać ci wyobrażenie o tym, jak wygląda składnia kontraktu w Vyper. Bardziej szczegółowy opis funkcji i zmiennych znajdziesz w dokumentacji (opens in a new tab).

Yul i Yul+

Jeśli jesteś nowy w Ethereum i nie programowałeś jeszcze w językach inteligentnych kontraktów, zalecamy rozpoczęcie od Solidity lub Vyper. Zainteresuj się Yul lub Yul+ dopiero wtedy, gdy zapoznasz się z najlepszymi praktykami bezpieczeństwa inteligentnych kontraktów i specyfiką pracy z Wirtualną Maszyną Ethereum (EVM).

Yul

  • Język pośredni dla Ethereum.
  • Obsługuje EVM oraz Ewasm (opens in a new tab), czyli WebAssembly w wersji dla Ethereum, i został zaprojektowany jako użyteczny wspólny mianownik obu platform.
  • Dobry cel dla etapów optymalizacji wysokiego poziomu, z których mogą w równym stopniu korzystać platformy EVM i Ewasm.

Yul+

  • Niskopoziomowe, wysoce wydajne rozszerzenie dla Yul.
  • Początkowo zaprojektowane dla kontraktu typu optymistyczny rollup.
  • Yul+ można traktować jako eksperymentalną propozycję aktualizacji dla Yul, dodającą do niego nowe funkcje.

Przykładowy kontrakt

Poniższy prosty przykład implementuje funkcję potęgowania. Można go skompilować za pomocą solc --strict-assembly --bin input.yul. Przykład powinien zostać zapisany w pliku input.yul.

Jeśli masz już duże doświadczenie z inteligentnymi kontraktami, pełną implementację ERC-20 w Yul znajdziesz tutaj (opens in a new tab).

Fe

  • Statycznie typowany język dla Wirtualnej Maszyny Ethereum (EVM).
  • Zainspirowany przez Python i Rust.
  • Ma być łatwy do nauki – nawet dla programistów, którzy są nowi w ekosystemie Ethereum.
  • Rozwój Fe jest wciąż na wczesnym etapie, język miał swoje wydanie alfa w styczniu 2021 roku.

Przykładowy kontrakt

Poniżej znajduje się prosty kontrakt zaimplementowany w Fe.

Jak wybrać

Podobnie jak w przypadku każdego innego języka programowania, chodzi głównie o wybór odpowiedniego narzędzia do odpowiedniego zadania, a także o osobiste preferencje.

Oto kilka rzeczy do rozważenia, jeśli nie próbowałeś jeszcze żadnego z tych języków:

Co jest wspaniałego w Solidity?

  • Jeśli jesteś początkujący, dostępnych jest wiele samouczków i narzędzi do nauki. Więcej na ten temat znajdziesz w sekcji Nauka przez kodowanie.
  • Dostępne są dobre narzędzia dla programistów.
  • Solidity ma dużą społeczność programistów, co oznacza, że najprawdopodobniej dość szybko znajdziesz odpowiedzi na swoje pytania.

Co jest wspaniałego w Vyper?

  • Świetny sposób na rozpoczęcie pracy dla programistów Pythona, którzy chcą pisać inteligentne kontrakty.
  • Vyper ma mniejszą liczbę funkcji, co czyni go świetnym do szybkiego prototypowania pomysłów.
  • Vyper ma być łatwy do audytu i maksymalnie czytelny dla człowieka.

Co jest wspaniałego w Yul i Yul+?

  • Uproszczony i funkcjonalny język niskopoziomowy.
  • Pozwala znacznie zbliżyć się do surowego EVM, co może pomóc zoptymalizować zużycie gazu przez twoje kontrakty.

Porównania języków

Aby porównać podstawową składnię, cykl życia kontraktu, interfejsy, operatory, struktury danych, funkcje, przepływ sterowania i inne, sprawdź tę ściągawkę od Auditless (opens in a new tab)

Dalsza lektura