Samouczek Solidity: Wprowadzenie do programowania Solidity dla początkujących

Samouczek dotyczący solidności

Solidity to zorientowany obiektowo język wysokiego poziomu do tworzenia aplikacji dApps (zdecentralizowanych aplikacji) w łańcuchu blokowym Ethereum.

Blockchain to sieć komputerów typu peer-to-peer, zwanych węzłami, które udostępniają wszystkie dane i kod w sieci.

Tak więc, jeśli jesteś urządzeniem podłączonym do łańcucha blokowego, jesteś węzłem w sieci i rozmawiasz ze wszystkimi innymi węzłami komputerowymi w sieci (omówimy, jak skonfigurować węzeł Ethereum na komputerze lokalnym w późniejszych samouczkach).

Masz teraz kopię wszystkich danych i kodu w łańcuchu bloków. Nie ma już potrzeby stosowania centralnych serwerów.

Co to jest Ethereum?

Mówiąc najprościej, Ethereum to otwarta platforma oprogramowania oparta na technologii blockchain, która umożliwia programistom tworzenie i wdrażanie zdecentralizowanych aplikacji.

Podczas gdy łańcuch blokowy Bitcoin służy do śledzenia własności cyfrowej waluty (bitcoinów), łańcuch bloków Ethereum koncentruje się na uruchamianiu kodu zdecentralizowanych aplikacji.

W blockchain Ethereum, zamiast kopać bitcoiny, górnicy pracują, aby zdobyć Ether, rodzaj krypto tokena, który zasila sieć. Oprócz zbywalnej kryptowaluty, Ether jest również używany przez twórców aplikacji do płacenia za opłaty transakcyjne i usługi w sieci Ethereum.

Istnieje drugi rodzaj tokena, który służy do płacenia górnikom opłat za włączenie transakcji do ich bloku, nazywany jest gazem, a każda inteligentna realizacja kontraktu wymaga wysłania wraz z nim określonej ilości gazu, aby zachęcić górników do umieszczenia go blockchain.

#Crypto ExchangeBenefits

1

Binance
Best exchange


VISIT SITE
  • ? The worlds biggest bitcoin exchange and altcoin crypto exchange in the world by volume.
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

2

Coinbase
Ideal for newbies


Visit SITE
  • Coinbase is the largest U.S.-based cryptocurrency exchange, trading more than 30 cryptocurrencies.
  • Very high liquidity
  • Extremely simple user interface

3

eToro
Crypto + Trading

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

Począwszy od podstaw

Kod Solidity jest zawarty w kontraktach.

Ethereum blockchain pozwala nam wykonywać kod za pomocą maszyny wirtualnej Ethereum (EVM) w łańcuchu bloków za pomocą czegoś, co nazywa się inteligentnym kontraktem.

Inteligentne kontrakty to miejsce, w którym żyje cała logika biznesowa naszej aplikacji – wszystkie zmienne i funkcje należą do kontraktu i będzie to punkt wyjścia dla wszystkich Twoich projektów.

Inteligentne kontakty są napisane w języku programowania zwanym Solidity, który wygląda jak mieszanka Javascript i C.

#CRYPTO BROKERSBenefits

1

eToro
Best Crypto Broker

VISIT SITE
  • Multi-Asset Platform. Stocks, crypto, indices
  • eToro is the world’s leading social trading platform, with thousands of options for traders and investors.

2

Binance
Cryptocurrency Trading


VISIT SITE
  • ? Your new Favorite App for Cryptocurrency Trading. Buy, sell and trade cryptocurrency on the go
  • Binance provides a crypto wallet for its traders, where they can store their electronic funds.

#BITCOIN CASINOBenefits

1

Bitstarz
Best Crypto Casino

VISIT SITE
  • 2 BTC + 180 free spins First deposit bonus is 152% up to 2 BTC
  • Accepts both fiat currencies and cryptocurrencies

2

Bitcoincasino.io
Fast money transfers


VISIT SITE
  • Six supported cryptocurrencies.
  • 100% up to 0.1 BTC for the first
  • 50% up to 0.1 BTC for the second

Remix IDE

Remix to narzędzie online, które pozwala pisać inteligentne kontrakty Solidity, a następnie wdrażać je i uruchamiać.

Po prostu idź do https://remix.ethereum.org z Twojej przeglądarki i możemy zacząć kodować.

Jak widać, możesz wybierać między Solidity i Vyper. Oba są językami do pisania inteligentnych kontraktów, Vyper jest podobny do Pythona, a Solidity jest podobny do JavaScript.

Oba mogą skompilować się do kodu bajtowego EVM, trochę jak Javascript i Typescript. Stawiamy na Solidity.

Po lewej stronie znajduje się eksplorator plików. Domyślnie istnieją dwa pliki .sol, aby pokazać podstawową składnię (ballot.sol to inteligentny kontrakt, ballot_test.sol to skrypt do testowania tego inteligentnego kontraktu).

Wystarczy kliknąć ten przycisk plus i możemy rozpocząć kodowanie naszej pierwszej inteligentnej umowy.

Cały kod źródłowy Solidity powinien zaczynać się od „pragmy wersji” – deklaracji wersji kompilatora Solidity, którego ten kod powinien używać. Ma to na celu zapobieżenie problemom z przyszłymi wersjami kompilatora, które mogą wprowadzać zmiany, które mogłyby spowodować uszkodzenie kodu.

To wygląda tak:

solidność pragmy ^ 0,4,25;

(dla wersji Solidity powyżej 0.4.25)

lub

pragma solidność >= 0,5,0 < 0.6.0;

(dla wersji Solidity od 0.5.0 do 0.6.0)

Następnie tworzysz umowę, wpisując słowo zastrzeżone kontrakt i nazwa twojego pliku .sol (ważne jest, aby nazwa kontraktu była zgodna z nazwą pliku, omówimy to później). W naszym przypadku,

kontrakt MyFirstContract {

}

Skompilujmy to. Wystarczy przejść do zakładki kompilacji po lewej stronie i kliknąć duży przycisk kompilacji. Jeśli coś jest nie tak z kodem, zobaczysz tutaj błędy i ostrzeżenia (współczuj Solidity, to wciąż „młody język”).

Z naszą obecną umową wszystko jest w porządku, ponieważ tak naprawdę nic nie zrobiliśmy.

Teraz celowo wygeneruję błąd, żeby ci coś pokazać. Możesz ręcznie wybrać kompilator z tego menu rozwijanego.

Wybierzmy na przykład wersję 0.4.26. Teraz skompiluj go ponownie. Teraz zobaczysz błąd „Kompilator jeszcze nie załadowany”.

Dzieje się tak, ponieważ z pragmą postanowiliśmy pracować z wersjami kompilatora powyżej 0.5.0. Po prostu zmień ponownie wersję kompilatora, a błąd zniknie.

OK, zakodujmy teraz!

Zaczniemy od prostego kodu „Hello world” oraz pobierania i ustawiania funkcji, aby lepiej zapoznać się ze składnią.

Kontrakt w sensie Solidity to zbiór kodu (jego funkcji) i danych (jego stanu), który znajduje się pod określonym adresem w łańcuchu blokowym Ethereum.

Najpierw zdefiniujmy na przykład zmienną stanu o nazwie komunikat, której typem będzie łańcuch.

Nasza funkcja get zwróci wartość naszej zmiennej wiadomości, a funkcja set przypisze nową wartość do naszej zmiennej wiadomości.

Jak wpisywać funkcje?

Po pierwsze, słowo zastrzeżone funkcjonować następnie nazwa konkretnej funkcji i parametrów, a potem .

function myFunction () zwraca (bool) {

powrót prawda;

}

Funkcje mogą być publiczny lub prywatny. Jeśli funkcja jest publiczna, można ją wywołać poza umową. Jeśli funkcja jest prywatna, ma ograniczony zakres i może być wywoływana tylko z bieżącego kontraktu (na przykład z innej funkcji).

Oto lista wszystkich specyfikatorów widoczności funkcji:

  • publiczny: widoczne zewnętrznie i wewnętrznie (tworzy funkcję pobierającą dla zmiennych pamięci / stanu)
  • prywatny: widoczne tylko w aktualnej umowie
  • zewnętrzny: widoczne tylko zewnętrznie (tylko dla funkcji) – tj. można wywoływać tylko wiadomości (przez this.func)
  • wewnętrzny: widoczne tylko wewnętrznie

Funkcje mogą być czysty, widok, lub płatny. Jeśli funkcja nie zapisuje żadnych danych na blockchain, bardzo zaleca się ją przeglądać, ponieważ funkcje przeglądania nie kosztują żadnego gazu.

Oto lista wszystkich modyfikatorów funkcji (są też modyfikatory dla zmiennych stanu, zdarzeń i argumentów zdarzeń, ale omówimy je później):

  • czysty: Zabrania modyfikacji lub dostępu do stanu.
  • widok: Nie zezwala na modyfikację stanu.
  • płatny: Pozwala im otrzymać Ether wraz z połączeniem.

Jeśli funkcja zwraca jakąś wartość, musisz określić ją słowem zastrzeżonym zwroty a następnie w regularnych nawiasach, aby określić, jaki typ zwraca funkcja. W naszym przypadku będzie to string (ponieważ zwracamy naszą zmienną wiadomość, która jest stringiem)

Jeśli funkcja nie zwraca żadnej wartości, nie ma takiej potrzeby zwroty komunikat.

Aby uzyskać dostęp do zmiennej stanu, nie potrzebujesz prefiksu to. jak to jest powszechne w innych językach.

Z tego powodu powszechną praktyką jest zapisywanie argumentów funkcji ze składnią podkreślenia (_wiadomość). Ta konwencja pochodzi z JavaScript, gdzie prywatne metody i zmienne zaczynają się od _.

Aby było jasne, Twój kod będzie działał dobrze i bez znaków podkreślenia, ale z nimi będzie bardziej przejrzysty.

Zauważysz słowo zastrzeżone pamięć w naszym kodzie. Jeśli napiszesz nasz kod bez pamięci i ustawisz pragmę na jakąś wersję poniżej 0,5. * Będzie działać dobrze, ale gdy zmienisz kompilator na powyżej 0,5. * EVM generuje błąd kompilacji.

Dlaczego to się dzieje?

Cóż, maszyna wirtualna Ethereum ma trzy obszary, w których może przechowywać przedmioty.

  • Pierwsza to przechowywanie, gdzie znajdują się wszystkie zmienne stanu kontraktu. Każda umowa ma swoją własną pamięć i jest trwała między wywołaniami funkcji i dość droga w użyciu.
  • Po drugie pamięć, służy do przechowywania wartości tymczasowych. Jest usuwany między (zewnętrznymi) wywołaniami funkcji i jest tańszy w użyciu.
  • Trzeci to stos, który jest używany do przechowywania małych zmiennych lokalnych. Jest prawie darmowy, ale może zawierać tylko ograniczoną liczbę wartości.

W przypadku prawie wszystkich typów nie można określić, gdzie powinny być przechowywane, ponieważ są one kopiowane za każdym razem, gdy są używane.

Ale kiedy pracujesz z tablicami lub strukturami, a także z najnowszymi wersjami z ciągami, kompilator zmusi cię do określenia obszaru sklepu.

Tak więc nasz kod wygląda teraz następująco:

solidność pragma ^ 0,5,0;

kontrakt MyFirstContract {

wiadomość tekstowa;

function get () public view zwraca (pamięć ciągu znaków) {

wiadomość zwrotna;

}

function set (string memory _message) public {

wiadomość = _ wiadomość;

}

}

Zwróć uwagę, że niektórzy programiści Solidity dzielą te specyfikatory widoczności na oddzielne wiersze, aby kod był bardziej przejrzysty. Więc naszą funkcję get można zapisać w ten sposób:

funkcja get ()

publiczny

widok

zwraca (ciąg)

{

wiadomość zwrotna;

}

To naprawdę zależy od Ciebie, jak zdecydujesz się napisać swoje funkcje.

Skompilujmy teraz naszą umowę i przetestujmy ją.

Aby go skompilować, po prostu powtórz kroki od dołu (Skompiluj .sol przycisk lub cmd / ctrl + S z klawiatury i automatycznie ją przekompiluje)

Aby faktycznie zobaczyć, jak to działa (jeśli kompilacja nie generuje błędów), musisz wdrożyć kontrakt.

Aby to zrobić, przejdź do zakładki Wdrożenie od lewej, dla środowiska wybierz JavaScriptVM i naciśnij przycisk Wdróż.

Po wdrożeniu możemy teraz zobaczyć metody z naszej umowy. Skoncentrujmy się teraz tylko na tej części ekranu.

Możesz zobaczyć, że są dwa przyciski (pobierz & set) dla naszych dwóch funkcji publicznych. Gdyby któryś z nich był prywatny, nie zobaczylibyśmy tego tutaj.

Jeśli klikniemy przycisk get, EVM wykona naszą funkcję get.

Zobaczmy, jak to się udało.

Mamy pusty ciąg. Nie wspaniale, nie strasznie. Ale dlaczego? Cóż, ponieważ na początku nie zainicjowaliśmy naszej zmiennej wiadomości.

Tylko jedna krótka pauza. Chcę, żebyś przedstawił Terminal Remix. Znajduje się w edytorze kodu i tutaj możesz śledzić wszystkie transakcje, aby sprawdzić, czy zostały pomyślnie wykonane, czy nie, aby je debugować, zobaczyć szczegóły (hash transakcji itp.) I nie tylko.

Na razie mamy dwie udane transakcje. Jednym z nich jest wdrożenie kontraktu i kosztuje nas eter (ale nie martw się, jesteśmy w edytorze, teraz wszystko jest wirtualne), a drugim jest Call of our widok funkcjonować.

Ok, wróćmy teraz. Co się stanie, jeśli teraz wywołamy funkcję set?

Musimy przekazać argument _message (na przykład „Hello World”) i nacisnąć przycisk transakcji, aby wykonać funkcję. Możesz śledzić sukces transakcji w Terminalu.

Teraz ponownie wywołajmy funkcję get. Teraz zwraca naszą wiadomość.

Wprowadźmy kilka ulepszeń do naszego kodu. Nie zainicjowaliśmy naszej zmiennej wiadomości. Zróbmy to.

kontrakt MyFirstContract {

wiadomość tekstowa = "Witaj świecie!";

function get () public view zwraca (pamięć ciągu znaków) {

wiadomość zwrotna;

}

function set (string memory _message) public {

wiadomość = _ wiadomość;

}

}

Zauważ, że wiadomość brzmi teraz „Witaj świecie!” I kiedy wywołujemy funkcję get po raz pierwszy, nie zwróci ona pustego ciągu.

Aby to przetestować, musimy skompilować nasz kontrakt (cmd / ctrl + S).

Następnie wdrożyć go ponownie. Musimy stworzyć nową instancję kontraktu (ze względu na wprowadzone przez nas zmiany) i opublikować ją na blockchain.

Po prostu usuń poprzednią wersję z edytora (oczywiście nie z naszego wirtualnego łańcucha bloków) i ponownie naciśnij przycisk Wdróż. Nazwijmy teraz naszą funkcję get.

Miły! Wywołajmy teraz funkcję set.

I znowu.

Fajne.

Zróbmy teraz naszą wiadomość stały.

Nasz kod teraz:

solidność pragma ^ 0,5,0;

kontrakt MyFirstContract {

ciąg stały komunikat = "Witaj świecie!";

function get () public view zwraca (pamięć ciągu znaków) {

wiadomość zwrotna;

}

function set (string memory _message) public {

wiadomość = _ wiadomość;

}

}

Kiedy próbujemy go skompilować, otrzymujemy błąd w naszej funkcji set. To dlatego, że nie można zmienić wartości stałej.

Po prostu pozbędziemy się teraz tej stałej.

Inicjalizacja takich zmiennych nie jest błędem, ale znacznie lepiej jest zrobić to w konstruktorze. Możesz napisać konstruktora w Solidity za pomocą:

constructor () public {

// Zrób coś…

}

Konstruktor to po prostu kolejna funkcja, która jest wywoływana podczas wdrażania inteligentnego kontraktu. Nasz kod wygląda trochę inaczej, ale działa tak samo.

solidność pragma ^ 0,5,0;

kontrakt MyFirstContract {

wiadomość tekstowa;

constructor () public {

wiadomość = "Witaj świecie!";

}

function get () public view zwraca (pamięć ciągu znaków) {

wiadomość zwrotna;

}

function set (string memory _message) public {

wiadomość = _ wiadomość;

}

}

Możesz go ponownie skompilować i przetestować, jeśli chcesz.

Wreszcie można zmienić widoczność zmiennych stanu. Jeśli utworzysz zmienne stanu publiczny oznacza to, że można dochodzić ich wartości spoza umowy.

Solidność stworzy dla każdej publicznej zmiennej stanu metodę o tej samej nazwie, którą można wywołać jako zwykłą funkcję (coś w rodzaju funkcji pobierającej).

Oznacza to, że możemy pozbyć się funkcji get, po prostu zadeklarować zmienną wiadomość jako publiczny, a nasz kod będzie działał tak samo, będzie znacznie czystszy, a wdrożenie go jednego dnia w sieci głównej będzie nas kosztować mniej.

Im większy kod, tym więcej gazu potrzeba do jego wykonania, a koszt działania naszej aplikacji rośnie.

Tworząc inteligentne kontrakty, musimy:

  • wydajny – zużycie gazu musi być niskie
  • precyzyjny – po wdrożeniu inteligentnego kontraktu nie można go zmienić i jest on publiczny 24/7, każda linia kodu (wyobraź sobie hakera, który znajduje błąd i może wykorzystać twoją dApp)

Nasz ostateczny kod na dziś wygląda następująco:

solidność pragma ^ 0,5,0;

kontrakt MyFirstContract {

ciąg wiadomości publicznej;

constructor () public {

wiadomość = "Witaj świecie!";

}

function set (string memory _message) public {

wiadomość = _ wiadomość;

}

}

Wdróżmy to i przetestujmy.

Możesz zobaczyć ten przycisk wiadomości. Jest tworzony, ponieważ nasza wiadomość zmiennej stanu jest publiczna.

Jeśli to nazwiemy, powinna zwrócić nam wartość inicjowaną przez konstruktor (czyli „Hello world!”).

Miły. Przetestujmy teraz funkcję zestawu.

Jak nauczyć się solidności?

Solidność sama w sobie jest dość prostym językiem, ale aby być dobrym programistą Solidity, trzeba zrozumieć, jak wszystko działa w Ethereum.

  • Solidity to język programowania wysokiego poziomu o składni podobnej do ECMAScript (javascript).
  • Kompiluje się do kodu bajtowego EVM, coś, co może zrozumieć tylko EVM.
  • Kompilator nazywa się Solc.

Weźmy na przykład tę prostą umowę:

solidność pragma ^ 0,5,0;

Przykład umowy {

uint a = 10 + 5;

}

Proste. Teraz skompilujmy to. Jeśli przejdziemy do szczegółów kontraktu w terminalu, zobaczymy wiele informacji.

W tym przypadku skompilowany kod to:

0x6080604052600f600055348015601457600080fd5b5060358060226000396000f3fe6080604052600080fdfea165627a7a72305820bf75c57b7d8745a79baee513ead21a9eb8b075896f8e4c591c8916

Te długie wartości są szesnastkową reprezentacją ostatecznej umowy, znaną również jako kod bajtowy. EVM rozumie tylko kod bajtowy.

Ale jeśli coś pójdzie nie tak, utkniemy z jakimś błędem, na przykład nie można debugować kodu bajtowego.

Opcodes

Język powyżej kodu bajtowego to kod operacji. Opcode to język programowania niskiego poziomu. Solidity i Opcode to na przykład C i Assembly Language.

Więc kiedy musimy debugować jakąś nieudaną transakcję, debugujemy opcode.

Jedna rzecz, którą powinieneś wiedzieć o Solidity i debugowaniu – jest to bardzo trudne. Ale nie jest to niemożliwe, więc zanurzmy się w tym.

To jest opcode naszej przykładowej umowy:

0 PUSH1 60

02 PUSH1 40

04 WIĘCEJ

05 PUSH1 0f

07 PUSH1 00

09 SKLEP

10 CALLVALUE

11 DUP1

12 ISZERO

13 PUSH1 14

15 JUMPI

16 PUSH1 00

18 DUP1

19 REVERT

20 JUMPDEST

21 POP

22 PUSH1 35

24 DUP1

25 PUSH1 22

27 PUSH1 00

29 CODECOPY

30 PUSH1 00

32 POWRÓT

33 NIEPRAWIDŁOWY

34 PUSH1 80

36 PUSH1 40

38 MSTORE

39 PUSH1 00

41 DUP1

42 REVERT

43 NIEPRAWIDŁOWY

44 LOG1

45 PUSH6 627a7a723058

52 SHA3

53 NIEPRAWIDŁOWY

54 PUSH22 c57b7d8745a79baee513ead21a9eb8b075896f8e4c59

77 NIEPRAWIDŁOWY

78 DUP10

79 AND

80 JUMPI

81 NIEPRAWIDŁOWY

82 BALANS

83 PUSH29 750029

Opcodes to czytelne dla człowieka instrukcje programu. Wszystkie rozkazy mają swoje odpowiedniki szesnastkowe, np WIĘCEJ jest 0x52.

EVM to Stack Machine. Oparty jest na strukturze LIFO (Last In First Out). Aby uprościć, wyobraź sobie układanie kromek chleba w kuchence mikrofalowej, OSTATNIA kromka jest PIERWSZA, którą wyjmujesz.

W arytmetyce normalnej zapisujemy nasze równanie w ten sposób:

10 + 2 * 2

a odpowiedź brzmi 14, ponieważ mnożymy przed dodaniem.

W maszynie stosowej działa na zasadzie LIFO:

2 2 * 10 +

Oznacza to, że najpierw umieść 2 na stosie, a następnie kolejne 2, a następnie pomnóż. W rezultacie 4 siedzi na szczycie stosu. Teraz dodaj liczbę 10 do 4 i ostatecznie dodaj 2 liczby do siebie. Ostateczna wartość stosu to 14.

Czynność umieszczania danych w stosie nazywana jest instrukcją PUSH, a czynność usuwania danych ze stosu – instrukcją POP. Jest oczywiste, że najpopularniejszym kodem operacyjnym, jaki widzimy w powyższym przykładzie, jest PUSH1, co oznacza umieszczenie 1 bajtu danych w stosie.

Tak więc ta instrukcja:

PUSH1 0x60

oznacza umieszczenie na stosie 1-bajtowej wartości „0x60”. Przypadkowo wartość szesnastkowa PUSH1 również wynosi „0x60”. Po usunięciu nieobowiązkowego „0x” moglibyśmy zapisać tę logikę w kodzie bajtowym jako „6060”.

Przejdźmy trochę dalej.

PUSH1 0x60 PUSH1 0x40 MSTORE

MSTORE (0x52) przyjmuje 2 wejścia i nie wytwarza żadnego wyjścia. Powyższe kody operacyjne oznaczają:

PUSH1 (0 x 60): umieść 0x60 na stosie.

PUSH1 (0x40): umieść 0x40 w stosie.

MSTORE (0x52): przydziel 0x60 miejsca w pamięci i przejdź do pozycji 0x40.

Wynikowy kod bajtowy to:

6060604052

W rzeczywistości zawsze widzimy tę magiczną liczbę „6060604052” na początku każdego kodu bajtowego solidności, ponieważ tak wygląda sposób ładowania początkowego kontraktu inteligentnego.

Aby jeszcze bardziej skomplikować sprawę, 0x40 lub 0x60 nie może być interpretowane jako liczba rzeczywista 40 lub 60. Ponieważ są one szesnastkowe, 40 w rzeczywistości równa się 64 (16¹ x 4), a 60 równa się 96 (16¹ x 6) dziesiętnie.

Krótko mówiąc, to, co robi „PUSH1 0x60 PUSH1 0x40 MSTORE”, to przydzielanie 96 bajtów pamięci i przesuwanie wskaźnika na początek 64 bajtu. Mamy teraz 64 bajty na pamięć podręczną i 32 bajty na tymczasowe przechowywanie w pamięci.

W EVM są 3 miejsca do przechowywania danych. Po pierwsze w stosie. Właśnie użyliśmy kodu operacji PUSH do przechowywania tam danych, jak w powyższym przykładzie.

Po drugie w pamięci (RAM), w której używamy kodu operacji MSTORE i na końcu w pamięci dyskowej, w której używamy SSTORE do przechowywania danych. Gaz potrzebny do przechowywania danych jest najdroższy, a przechowywanie danych w stosie jest najtańsze.

Teraz jest dobry czas, aby wrócić do naszego kodu Solidity z tego samouczka i podsumować, czego dowiedzieliśmy się o zastrzeżonym słowie pamięć i jak kompilator zmusza nas do określenia, na przykład, jak przechowujemy ciągi znaków.

Omówiliśmy tylko podstawy kodu bajtowego i kilka rozkazów.

Nie musimy znać kodów operacyjnych, aby zacząć pisać inteligentną umowę!

Z drugiej strony, obsługa błędów EVM jest nadal bardzo prymitywna i przydatna jest do sprawdzania rozkazów, gdy coś pójdzie nie tak.

Wniosek

Ta pierwsza lekcja zawiera trochę więcej teorii niż faktyczne kodowanie, ale bardzo ważne jest, aby początkujący wiedzieli, jak działa Ethereum. W następnych samouczkach napiszemy bardziej interesujący kod i dowiemy się, jak wdrożyć własny token w łańcuchu blokowym Ethereum.

Dopóki &# 128075;

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
Adblock
detector
map