W poprzednim wpisie pokazywałem podstawy programowania w solidity, który zakończyłem przykładem najprostszego przykładu klasycznego Hello world-a 😉 Jeżeli przegapiłeś to możesz przeczytać go tutaj.
Wymagania wstępne
Najprostsze IDE dostępne w przeglądarce nie jest najlepszym miejscem do pisania swoich programów m.in. dlatego, że nie ma tam zapisywania wyników.
Dzisiaj pokażę jak postawić lokalnie środowisko do pisania i testowania swoich smart contract-ów. Będziemy potrzebowali mieć zainstalowane:
- Edytor tekstowy wspierający składnię Solidity. Ja użyję Visual Studio Code
- NodeJs
- npm
- Docker – opcjonalnie
Instalacja klienta sieci Ethereum
Do wyboru mamy kilkanaście klientów m.in.
- Geth – zaimplementowany w Go
- Parity – zaimplemetowany w Rust
- ruby-ethereum, cpp-ethereum, pyethapp, Ethereum(J)
Ja użyję klienta Geth. To zacznijmy od instalacji.
Na stronie: https://geth.ethereum.org/downloads/ mamy możliwość pobrania pliku instalacyjnego na poszczególne platformy. Pobieramy i instalujemy
Dodatkowo na macOs możemy to zainstalować z terminala:
brew tap ethereum/ethereum brew install ethereum
Lub jeżeli używacie Docker-a można odpalić nowy kontener z Geth-em.
Ja użyłem opcji instalacji z terminala na macOs.
Z klientem sieci Ethereum możemy się komunikować używając czegoś co się nazywa json-rpc api (json-remote procedure calls api). Jest to lista metod, którą udostępnia klient i które możemy wołać przekazując argument w formacie json. Lista ważniejszych dostępnych metod:
- web3_clientVersion – pozwala uzyskać wersję klienta z którym się łączymy
- net_peerCount – pokazuje liczbę innych komputerów w sieci (peers) do których jest połączony klient
- eth_getBlockByHash
- eth_getBlockByNumber
Obie te metody pozwalają pobrać block po hash-u lub po numerze z historii zapisanej w blockchain - eth_sendTransaction -metoda ta pozwala wysłać transakcję do sieci w kodzie
Oczywiście metod dostępnych jest więcej, a z pełną listą można zapoznać się w dokumentacji poszczególnych klientów dla Geth można znaleźć tutaj.
Uruchomienie klienta i interakcja
Uruchomić klienta można taką komendą:
geth --rinkeby -rpc --rpcapi="eth,net,web3,personal,txpool" --syncmode=light
–rinkeby – oznacza nazwę sieci, której użyliśmy w poprzednim wpisie gdzie pokazałem szybką metodę testowania naszych rozwiązań.
–rpc – flaga wymagana do tego, aby można było komunikować się z gethem, domyślnie nie ma takiej możliwości
–rpcapi – przekazujemy jakie z jakich obiektów api będziemy korzystać
–syncmode – stwierdza jaki sposób synchronizacji chcemy przeprowadzać light oznacza, że klient pobierze tylko aktualny stan sieci ethereum w danej sieci zamiast synchronizować całą historię co znacznie skraca czas uruchomienia
Po uruchomieniu klienta będzie on dostępny pod adresem: http://127.0.0.1:8545. Aby podłączyć się do javascript-owej konsoli otwieramy nowe okno terminala(nie zamykając poprzedniego, tam działa sobie klient Geth) i wpisujemy następującą komendę:
geth attach http://127.0.0.1:8545
I teraz możemy zacząć testować czy wszystko działa. Zacznijmy od sprawdzenia do ilu peerów nasz klient jest podłączony oraz wyświetlenie dostepnych pól i metod w modułach net i personal:
Mój klient jest podłączony do jednego peer-a i jak widzicie mam jedno konto, które stworzyłem wywołując komendę:
personal.newAccount("password")
Po tej komendzie wyświetli nam się adres stworzonego portfela. Nowo stworzone konta dodawane są na koniec listy z pola listAccounts modułu personal.
Sprawdźmy czy na tym koncie mamy jakieś środki:
eth.getBalance("wasz_adres_portfela_stworzonego_przed_chwilą")
Jako że po założeniu przelałem sobie tam środki to widzimy, że na tym koncie mam 20000000000000000 co!? Dlaczego to jest taka duża liczba mógłby ktoś spytać. Dokładna wartość jaką ta liczba reprezentuje to 0.2 ETH. Jest to jednak wyrażone w najmniejszej możliwej jednostce ETH, która nazywa się wei.
Ok to jeszcze na koniec, napisałem że przelałem sobie środki z innego konta. A . skąd je miałem, a no właśnie możemy zarequestować o darmowe eth testowe. Aby dostać testowe ethery, które są bezwartościowe otwieramy stronę:
https://faucet.rinkeby.io/, musimy mieć konto na twitterze lub fb. Dodajemy post z adresem naszego portfela (Ja wykorzystałem portfel Metamask, który można zainstalować jako wtyczkę do przeglądarki chrome. Po instalacji i założeniu konta (zapiszcie sobie seed do walleta) wybieramy Rinkeby Test Network zamiast Main Network z dropdowna na samej górze) i kopiujemy adres do tego posta. Wybieramy ile eth chcemy otrzymać(im więcej tym więcej czasu może trwać transfer środków.) Do celów testowych w zupełności wystarczy 3 ETH. W moim przypadku uzyskanie tych testowych eth zajęło kilka sekund.
Myślę, że jak na jeden wpis informacji i tak jest dość dużo. W kolejnym wpisie zaczniemy od tego jak wywołać transakcję i przesyłać środki w terminalu.
Dajcie znać czy podoba wam się taka formuła.
Do następnego !
Łukasz