{"id":39018,"date":"2019-10-31T22:27:25","date_gmt":"2019-10-31T19:27:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\/"},"modified":"2019-10-31T22:27:25","modified_gmt":"2019-10-31T19:27:25","slug":"kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","title":{"rendered":"Ksi\u0105\u017cka \u201eTworzenie smart kontrakt\u00f3w Solidity dla blockchaina Ethereum. Praktyczny przewodnik\u201d","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ksi\u0105\u017cka \u201eTworzenie smart kontrakt\u00f3w Solidity dla blockchaina Ethereum. Praktyczny przewodnik\u201d\" src=\"\/wp-content\/uploads\/2019\/10\/9549e708e99fef6892045ff854231fa7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPrzez ponad rok pracowa\u0142em nad ksi\u0105\u017ck\u0105 \u201eTworzenie smart kontrakt\u00f3w Solidity dla blockchaina Ethereum. Praktyczny przewodnik\u201d, a teraz ta praca jest zako\u0144czona, a ksi\u0105\u017cka <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">zosta\u0142a wydana i jest dost\u0119pna na Litresie<\/a><\/noindex>.<\/p>\n<p>Mam nadziej\u0119, \u017ce moja ksi\u0105\u017cka pomo\u017ce szybko rozpocz\u0105\u0107 tworzenie smart kontrakt\u00f3w Solidity oraz aplikacji rozproszonych DApp dla blockchaina Ethereum. Sk\u0142ada si\u0119 z 12 lekcji z praktycznymi zadaniami. Wykonuj\u0105c je, czytelnik b\u0119dzie w stanie tworzy\u0107 w\u0142asne lokalne w\u0119z\u0142y Ethereum, publikowa\u0107 smart kontrakty oraz wywo\u0142ywa\u0107 ich metody, wymienia\u0107 dane mi\u0119dzy rzeczywistym \u015bwiatem a smart kontraktami za pomoc\u0105 orakli oraz pracowa\u0107 z testow\u0105 sieci\u0105 Rinkeby. <\/p>\n<p>Ksi\u0105\u017cka jest przeznaczona dla wszystkich, kt\u00f3rzy interesuj\u0105 si\u0119 nowoczesnymi technologiami w dziedzinie blockchain\u00f3w i chc\u0105 szybko zdoby\u0107 wiedz\u0119, kt\u00f3ra pozwoli im na zajmowanie si\u0119 interesuj\u0105c\u0105 i perspektywiczn\u0105 prac\u0105.<\/p>\n<p>Poni\u017cej znajdziesz spis tre\u015bci i pierwszy rozdzia\u0142 ksi\u0105\u017cki (tak\u017ce na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">Litresie<\/a><\/noindex> dost\u0119pne s\u0105 fragmenty ksi\u0105\u017cki). Mam nadziej\u0119 na otrzymanie informacji zwrotnej, uwag i propozycji. Wszystko to postaram si\u0119 uwzgl\u0119dni\u0107 przy przygotowaniu nast\u0119pnej edycji ksi\u0105\u017cki.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Spis tre\u015bci<\/b><b class=\"spoiler_title\">Wprowadzenie<\/b>Nasza ksi\u0105\u017cka jest przeznaczona dla tych, kt\u00f3rzy nie tylko chc\u0105 zrozumie\u0107 zasady dzia\u0142ania blockchaina Ethereum, ale tak\u017ce zdoby\u0107 praktyczne umiej\u0119tno\u015bci w tworzeniu rozproszonych aplikacji DApp w j\u0119zyku programowania Solidity dla tej sieci.<\/p>\n<p>T\u0119 ksi\u0105\u017ck\u0119 najlepiej nie tylko czyta\u0107, ale pracowa\u0107 z ni\u0105, wykonuj\u0105c praktyczne zadania opisane w lekcjach. Aby pracowa\u0107, potrzebujesz lokalnego komputera, wirtualnego lub chmurowego serwera z zainstalowanym systemem operacyjnym Debian lub Ubuntu. Mo\u017cna r\u00f3wnie\u017c u\u017cywa\u0107 Raspberry Pi do wielu zada\u0144.<\/p>\n<p><b>W pierwszej lekcji <\/b>rozwa\u017cymy zasady dzia\u0142ania blockchaina Ethereum oraz podstawow\u0105 terminologi\u0119, a tak\u017ce opowiemy o tym, gdzie mo\u017cna u\u017cywa\u0107 tego blockchaina. <\/p>\n<p>Cel <b>drugiej lekcji<\/b> \u2014 stworzenie w\u0119z\u0142a prywatnego blockchaina Ethereum do dalszej pracy w ramach tego kursu na serwerze Ubuntu i Debian. Om\u00f3wimy szczeg\u00f3\u0142y instalacji podstawowych narz\u0119dzi, takich jak geth, kt\u00f3re zapewnia dzia\u0142anie w\u0119z\u0142a naszego blockchaina, a tak\u017ce demona zdecentralizowanego magazynu danych swarm.<\/p>\n<p><b>Trzecia lekcja<\/b> nauczy Ci\u0119 przeprowadza\u0107 eksperymenty z Ethereum na niedrogim mikrokomputerze Raspberry Pi. Zainstalujesz system operacyjny (OS) Rasberian na Raspberry Pi, narz\u0119dzie Geth, kt\u00f3re obs\u0142uguje w\u0119ze\u0142 blockchain, a tak\u017ce demon zdecentralizowanego przechowywania danych Swarm.<\/p>\n<p><b>Czwarta lekcja<\/b> jest po\u015bwi\u0119cona kontom i jednostkom kryptowalutowym w sieci Ethereum, a tak\u017ce sposobom przesy\u0142ania \u015brodk\u00f3w z jednego konta na drugie za pomoc\u0105 konsoli Geth. Nauczysz si\u0119 tworzy\u0107 konta, inicjowa\u0107 transakcje transferu \u015brodk\u00f3w, uzyskiwa\u0107 stan transakcji oraz jej potwierdzenie.<\/p>\n<p><b>Na pi\u0105tej lekcji<\/b> poznasz smart kontrakty w sieci Ethereum i dowiesz si\u0119 o ich realizacji przez wirtualn\u0105 maszyn\u0119 Ethereum. <\/p>\n<p>Stworzysz i opublikujesz sw\u00f3j pierwszy smart kontrakt w prywatnej sieci Ethereum oraz nauczysz si\u0119 wywo\u0142ywa\u0107 jego funkcje. W tym celu u\u017cyjesz \u015brodowiska programistycznego Remix Solidity IDE. Ponadto nauczysz si\u0119 instalowa\u0107 i u\u017cywa\u0107 kompilatora pakietowego solc.<br \/>\nOpowiemy r\u00f3wnie\u017c o tzw. binarnym interfejsie aplikacji Application Binary Interface (ABI) i nauczymy go u\u017cywa\u0107.<\/p>\n<p><b>Sz\u00f3sta lekcja<\/b> jest po\u015bwi\u0119cona tworzeniu skrypt\u00f3w JavaScript dzia\u0142aj\u0105cych na Node.js, kt\u00f3re wykonuj\u0105 operacje na smart kontraktach Solidity.<\/p>\n<p>Zainstalujesz Node.js w systemach operacyjnych Ubuntu, Debian i Rasberian, napiszesz skrypty do publikacji smart kontraktu w lokalnej sieci Ethereum oraz wywo\u0142ywania jego funkcji. <\/p>\n<p>Ponadto nauczysz si\u0119 przesy\u0142a\u0107 \u015brodki mi\u0119dzy zwyk\u0142ymi kontami za pomoc\u0105 skrypt\u00f3w, a tak\u017ce wp\u0142aca\u0107 je na konta smart kontrakt\u00f3w.<\/p>\n<p><b>Na si\u00f3dmej lekcji<\/b> nauczysz si\u0119 instalowa\u0107 i u\u017cywa\u0107 popularnego w\u015br\u00f3d programist\u00f3w smart kontrakt\u00f3w \u015brodowiska Truffle. Nauczysz si\u0119 tworzy\u0107 skrypty JavaScript, kt\u00f3re wywo\u0142uj\u0105 funkcje kontrakt\u00f3w za pomoc\u0105 modu\u0142u truffle-contract, a tak\u017ce przeprowadzisz testowanie swojego smart kontraktu za pomoc\u0105 Truffle.<\/p>\n<p><b>\u00d3sma lekcja<\/b> jest po\u015bwi\u0119cona typom danych Solidity. Napiszesz smart kontrakty, kt\u00f3re pracuj\u0105 z takimi typami danych jak liczby ca\u0142kowite ze znakiem i bez znaku, liczby zmiennoprzecinkowe, ci\u0105gi, adresy, zmienne z\u0142o\u017conych typ\u00f3w, tablice, wyliczenia, struktury i s\u0142owniki.<\/p>\n<p><b>Na dziewi\u0105tej lekcji<\/b> Zbli\u017cysz si\u0119 o krok do tworzenia smart kontrakt\u00f3w dla g\u0142\u00f3wnej sieci Ethereum. Nauczysz si\u0119 publikowa\u0107 kontrakty za pomoc\u0105 Truffle w prywatnej sieci Geth oraz w sieci testowej Rinkeby. Debugowanie smart kontraktu w sieci Rinkeby jest bardzo pomocne przed jego publikacj\u0105 w g\u0142\u00f3wnej sieci \u2013 tam wszystko dzia\u0142a naprawd\u0119, ale jest darmowe.<\/p>\n<p>W ramach lekcji stworzysz w\u0119ze\u0142 sieci testowej Rinkeby, zasilisz go funduszami i opublikujesz smart kontrakt.<\/p>\n<p><b>Lekcja 10<\/b> po\u015bwi\u0119cona jest rozproszonym magazynom danych Ethereum Swarm. Korzystaj\u0105c z rozproszonych magazyn\u00f3w, oszcz\u0119dzasz na przechowywaniu du\u017cych ilo\u015bci danych w blockchainie Ethereum. <\/p>\n<p>W ramach tej lekcji stworzysz lokalne magazynowanie Swarm, przeprowadzisz operacje zapisu i odczytu plik\u00f3w oraz katalog\u00f3w z plikami. Nast\u0119pnie nauczysz si\u0119 korzysta\u0107 z publicznej bramy Swarm, napiszesz skrypty do komunikacji z Swarm z Node.js oraz za pomoc\u0105 modu\u0142u Perl Net::Ethereum::Swarm.<\/p>\n<p><b>Celem lekcji 11<\/b> jest opanowanie pracy ze smart kontraktami Solidity z wykorzystaniem popularnego j\u0119zyka programowania Python i frameworka Web3.py. Zainstalujesz ten framework, napiszesz skrypty do kompilacji i publikacji smart kontraktu, a tak\u017ce do wywo\u0142ywania jego funkcji. Web3.py b\u0119dzie u\u017cywany zar\u00f3wno samodzielnie, jak i w tandemie z zintegrowanym \u015brodowiskiem programistycznym Truffle.<\/p>\n<p><b>W lekcji 12<\/b> nauczysz si\u0119 przekazywa\u0107 dane mi\u0119dzy smart kontraktami a rzeczywistym \u015bwiatem za pomoc\u0105 orakli. Przyda si\u0119 to do pozyskiwania danych z witryn internetowych, urz\u0105dze\u0144 Internetu Rzeczy (IoT), r\u00f3\u017cnych instrument\u00f3w i czujnik\u00f3w, oraz wysy\u0142ania danych z smart kontrakt\u00f3w do tych urz\u0105dze\u0144. W cz\u0119\u015bci praktycznej lekcji stworzysz orakl i smart kontrakt, kt\u00f3ry otrzyma aktualny kurs wymiany USD na ruble z strony internetowej Narodowego Banku Rosji.<\/p>\n<p><b class=\"spoiler_title\">Lekcja 1. Kr\u00f3tkie wprowadzenie do blockchaina i sieci Ethereum<\/b><b>Cel lekcji:<\/b> zapozna\u0107 si\u0119 z zasadami dzia\u0142ania blockchaina Ethereum, jego obszarami zastosowa\u0144 oraz podstawow\u0105 terminologi\u0105.<br \/>\n<b>Zadania praktyczne:<\/b> w tej lekcji nie s\u0105 przewidziane.<\/p>\n<p>Trudno dzi\u015b znale\u017a\u0107 programist\u0119, kt\u00f3ry nie s\u0142ysza\u0142by o technologii blockchain, kryptowalutach, bitcoinie, pierwotnym oferowaniu monet (ICO), smart kontraktach oraz innych poj\u0119ciach i terminach zwi\u0105zanych z blockchainem.<\/p>\n<p>Technologia blockchain otwiera nowe rynki i tworzy miejsca pracy dla programist\u00f3w. Je\u015bli zg\u0142\u0119bisz wszystkie tajniki technologii kryptowalut oraz smart kontrakt\u00f3w, nie powiniene\u015b mie\u0107 problem\u00f3w z ich praktycznym zastosowaniem.<\/p>\n<p>Nale\u017cy zauwa\u017cy\u0107, \u017ce wok\u00f3\u0142 kryptowalut i blockchain\u00f3w powstaje wiele spekulacji. Od\u0142o\u017cymy na bok rozwa\u017cania na temat zmian kurs\u00f3w kryptowalut, tworzenia piramid, niuans\u00f3w regulacji kryptowalutowych itp. W naszym kursie edukacyjnym skupimy si\u0119 g\u0142\u00f3wnie na aspektach technicznych zastosowania smart kontrakt\u00f3w na blockchainie Ethereum oraz rozwijaniu tzw. zdecentralizowanych aplikacji (Distributed Application, DApp).<\/p>\n<h3>Co to jest blockchain<\/h3>\n<p>\nBlockchain (Blockchain, Block Chain) to \u0142a\u0144cuch blok\u00f3w danych, kt\u00f3re s\u0105 ze sob\u0105 po\u0142\u0105czone w okre\u015blony spos\u00f3b. Na pocz\u0105tku \u0142a\u0144cucha znajduje si\u0119 pierwszy blok, zwany blokiem pocz\u0105tkowym (genesis block) lub blokiem genzysu. Nast\u0119pnie znajduje si\u0119 drugi, potem trzeci i tak dalej.<\/p>\n<p>Wszystkie te bloki danych s\u0105 automatycznie dublowane na licznych w\u0119z\u0142ach sieci blockchain. Dzi\u0119ki temu zapewnione jest zdecentralizowane przechowywanie danych blockchaina. <br \/>\nMo\u017cesz wyobrazi\u0107 sobie system blockchain jako du\u017c\u0105 liczb\u0119 w\u0119z\u0142\u00f3w (fizycznych lub wirtualnych serwer\u00f3w), po\u0142\u0105czonych w sie\u0107 i replikuj\u0105cych wszystkie zmiany w \u0142a\u0144cuchu blok\u00f3w danych. To jakby gigantyczny komputer wieloserwerowy, przy czym w\u0119z\u0142y tego komputera (serwery) mog\u0105 by\u0107 rozproszone po ca\u0142ym \u015bwiecie. Ty r\u00f3wnie\u017c mo\u017cesz doda\u0107 sw\u00f3j komputer do sieci blockchain. <\/p>\n<h4>Zdecentralizowana baza danych<\/h4>\n<p>\nBlockchain mo\u017cna przedstawi\u0107 jako zdecentralizowan\u0105 baz\u0119 danych, replikowan\u0105 na wszystkie w\u0119z\u0142y sieci blockchain. W teorii blockchain b\u0119dzie dzia\u0142a\u0107, dop\u00f3ki dzia\u0142a przynajmniej jeden w\u0119ze\u0142, przechowuj\u0105cy wszystkie bloki blockchaina.<\/p>\n<h4>Zdecentralizowany rejestr danych<\/h4>\n<p>\nBlockchain mo\u017cna przedstawi\u0107 jako zdecentralizowany rejestr danych i operacji (transakcji). Inn\u0105 nazw\u0105 takiego rejestru jest ksi\u0119gowo\u015b\u0107. <\/p>\n<p>Do rozproszonego rejestru mo\u017cna dodawa\u0107 dane, ale nie mo\u017cna ich modyfikowa\u0107 ani usuwa\u0107. Taka niemo\u017cliwo\u015b\u0107 osi\u0105gana jest m.in. poprzez zastosowanie algorytm\u00f3w kryptograficznych, specjalnych algorytm\u00f3w dodawania blok\u00f3w do \u0142a\u0144cucha oraz zdecentralizowanego przechowywania danych.<\/p>\n<p>Podczas dodawania blok\u00f3w i wykonywania operacji (transakcji) u\u017cywane s\u0105 klucze prywatne i publiczne. Ograniczaj\u0105 one u\u017cytkownik\u00f3w blockchaina, daj\u0105c im dost\u0119p tylko do swoich blok\u00f3w danych.<\/p>\n<h4>Transakcje<\/h4>\n<p>\nBlockchain przechowuje informacje o operacjach (transakcjach) w blokach. Przy tym stare, ju\u017c wykonane transakcje nie mog\u0105 by\u0107 cofni\u0119te ani zmienione. Nowe transakcje s\u0105 przechowywane w nowych, dodanych blokach.<\/p>\n<p>W ten spos\u00f3b w blockchainie mo\u017cna zapisa\u0107 w niezmienionej formie ca\u0142\u0105 histori\u0119 transakcji. Dlatego blockchain mo\u017ce by\u0107 u\u017cywany np. do bezpiecznego przechowywania operacji bankowych, informacji o prawach autorskich, historii zmian w\u0142a\u015bcicieli nieruchomo\u015bci itp.<\/p>\n<p>Blockchain Ethereum zawiera tzw. stany systemu. W miar\u0119 wykonywania transakcji stan zmienia si\u0119 od pocz\u0105tkowego do obecnego. Transakcje s\u0105 zapisywane w blokach.<\/p>\n<h4>Publiczne i prywatne blockchainy<\/h4>\n<p>\nNale\u017cy zauwa\u017cy\u0107, \u017ce to, co powiedziano, dotyczy tylko tzw. publicznych sieci blockchain, kt\u00f3re nie mog\u0105 by\u0107 kontrolowane przez \u017cadne pojedyncze osoby fizyczne lub prawne, w\u0142adze pa\u0144stwowe ani rz\u0105dy. <br \/>\nTzw. prywatne sieci blockchain s\u0105 pod ca\u0142kowit\u0105 kontrol\u0105 ich tw\u00f3rc\u00f3w i tam mo\u017cliwe jest wszystko, na przyk\u0142ad ca\u0142kowita wymiana wszystkich blok\u00f3w \u0142a\u0144cucha.<\/p>\n<h4>Praktyczne zastosowania blockchaina<\/h4>\n<p>\nDo czego przydatny jest blockchain?<\/p>\n<p>Kr\u00f3tko m\u00f3wi\u0105c, blockchain umo\u017cliwia bezpieczne przeprowadzanie operacji (transakcji) pomi\u0119dzy osobami lub firmami, kt\u00f3re sobie nie ufaj\u0105. Dane zapisane w blockchainie (transakcje, dane osobowe, dokumenty, za\u015bwiadczenia, umowy, faktury itp.) nie mog\u0105 by\u0107 podrobione ani zast\u0105pione po zapisaniu. Dlatego na bazie blockchaina mo\u017cna tworzy\u0107 np. zaufane rozproszone rejestry r\u00f3\u017cnego rodzaju dokument\u00f3w.<\/p>\n<p>Oczywi\u015bcie, wiesz, \u017ce na bazie blockchain\u00f3w powstaj\u0105 systemy kryptowalutowe, maj\u0105ce na celu zast\u0105pienie tradycyjnych papierowych pieni\u0119dzy. Papierowe pieni\u0105dze nazywane s\u0105 tak\u017ce fiatowymi (od Fiat Money).<br \/>\nBlockchain zapewnia przechowywanie i niezmienno\u015b\u0107 transakcji zapisanych w blokach, dlatego mo\u017cna go wykorzysta\u0107 do tworzenia system\u00f3w kryptowalutowych. Zawiera ca\u0142\u0105 histori\u0119 transferu kryptowalut mi\u0119dzy r\u00f3\u017cnymi u\u017cytkownikami (rachunkami), a ka\u017cda operacja jest mo\u017cliwa do \u015bledzenia.<\/p>\n<p>Mimo \u017ce operacje wewn\u0105trz system\u00f3w kryptowalutowych mog\u0105 by\u0107 anonimowe, wyp\u0142ata kryptowaluty i wymiana jej na pieni\u0105dze fiatowe zazwyczaj prowadz\u0105 do ujawnienia to\u017csamo\u015bci w\u0142a\u015bciciela aktyw\u00f3w kryptowalutowych. <\/p>\n<p>Tak zwane smart kontrakty, b\u0119d\u0105ce oprogramowaniem dzia\u0142aj\u0105cym w sieci Ethereum, pozwalaj\u0105 zautomatyzowa\u0107 proces zawierania um\u00f3w oraz kontrolowa\u0107 ich realizacj\u0119. Szczeg\u00f3lnie efektywne jest to, gdy p\u0142atno\u015b\u0107 za umow\u0119 realizowana jest w kryptowalucie Ether.<\/p>\n<p>Blockchain Ethereum i smart kontrakty Ethereum, napisane w j\u0119zyku programowania Solidity, mog\u0105 by\u0107 wykorzystywane w takich obszarach jak:<\/p>\n<ul>\n<li>alternatywa dla notarialnego po\u015bwiadczenia dokument\u00f3w;<\/li>\n<li>przechowywanie rejestru nieruchomo\u015bci oraz informacji o transakcjach z nimi zwi\u0105zanych;<\/li>\n<li>przechowywanie informacji o prawach autorskich do obiekt\u00f3w w\u0142asno\u015bci intelektualnej (ksi\u0105\u017cki, obrazy, utwory muzyczne itp.);<\/li>\n<li>tworzenie system\u00f3w niezale\u017cnego g\u0142osowania;<\/li>\n<li>sfera finans\u00f3w i dzia\u0142alno\u015b\u0107 bankowa;<\/li>\n<li>logistyka w skali mi\u0119dzynarodowej, \u015bledzenie przemieszczenia towar\u00f3w;<\/li>\n<li>przechowywanie danych osobowych jako odpowiednik systemu identyfikacji;<\/li>\n<li>bezpieczne transakcje w obszarze komercyjnych;<\/li>\n<li>przechowywanie wynik\u00f3w bada\u0144 medycznych oraz historii zalecanych procedur.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Problemy z blockchainem<\/h4>\n<p>\nJednak, oczywi\u015bcie, nie wszystko jest tak proste, jak mog\u0142oby si\u0119 wydawa\u0107! <\/p>\n<p>S\u0105 problemy z weryfikacj\u0105 danych przed ich dodaniem do blockchaina (na przyk\u0142ad, czy nie s\u0105 fa\u0142szywe?), problemy z bezpiecze\u0144stwem systemowego i aplikacyjnego oprogramowania stosowanego do pracy z blockchainem, a tak\u017ce problemy z mo\u017cliwo\u015bci\u0105 wykorzystania metod in\u017cynierii spo\u0142ecznej do kradzie\u017cy dost\u0119pu do portfeli z kryptowalutami itp.<\/p>\n<p>Z kolei je\u015bli m\u00f3wimy o prywatnym blockchainie, kt\u00f3ry nale\u017cy do osoby lub organizacji, poziom zaufania w tym przypadku nie przekroczy poziomu zaufania do tej osoby lub organizacji.<\/p>\n<p>Nale\u017cy r\u00f3wnie\u017c pami\u0119ta\u0107, \u017ce dane zapisane w blockchainie staj\u0105 si\u0119 dost\u0119pne dla wszystkich. W tym sensie blockchain (szczeg\u00f3lnie publiczny) nie nadaje si\u0119 do przechowywania poufnych informacji. Jednak fakt, \u017ce informacji w blockchainie nie mo\u017cna zmieni\u0107, mo\u017ce pom\u00f3c w zapobieganiu lub badaniu r\u00f3\u017cnych rodzaj\u00f3w oszustw.<\/p>\n<p>Zdecentralizowane aplikacje Ethereum b\u0119d\u0105 wygodne, je\u015bli op\u0142atami za ich u\u017cycie b\u0119dzie kryptowaluta. Im wi\u0119cej os\u00f3b posiada kryptowalut\u0119 lub jest gotowych j\u0105 naby\u0107, tym wi\u0119ksz\u0105 popularno\u015b\u0107 zdob\u0119d\u0105 aplikacje DApp i smart kontrakty.<\/p>\n<p>W\u015br\u00f3d og\u00f3lnych problem\u00f3w blockchaina, kt\u00f3re utrudniaj\u0105 jego praktyczne zastosowanie, mo\u017cna wymieni\u0107 ograniczon\u0105 szybko\u015b\u0107 dodawania nowych blok\u00f3w i stosunkowo wysokie koszty transakcji. Jednak technologie w tej dziedzinie rozwijaj\u0105 si\u0119 dynamicznie i istniej\u0105 nadzieje, \u017ce problemy techniczne z biegiem czasu zostan\u0105 rozwi\u0105zane.<\/p>\n<p>Kolejnym problemem jest to, \u017ce smart kontrakty blockchaina Ethereum dzia\u0142aj\u0105 w izolowanym \u015brodowisku maszyn wirtualnych i nie maj\u0105 dost\u0119pu do danych ze \u015bwiata rzeczywistego. W szczeg\u00f3lno\u015bci program smart kontraktu nie mo\u017ce samodzielnie odczyta\u0107 danych ze stron internetowych lub jakichkolwiek urz\u0105dze\u0144 fizycznych (czujnik\u00f3w, kontakt\u00f3w itp.), a tak\u017ce nie mo\u017ce wyprowadzi\u0107 danych na jakiekolwiek zewn\u0119trzne urz\u0105dzenia. Ten problem oraz sposoby jego rozwi\u0105zania om\u00f3wimy na lekcji po\u015bwi\u0119conej tzw. Orakulom \u2014 informacyjnym po\u015brednikom smart kontrakt\u00f3w.<\/p>\n<p>S\u0105 r\u00f3wnie\u017c ograniczenia w obszarze legislacji. W niekt\u00f3rych krajach, na przyk\u0142ad, zabrania si\u0119 u\u017cywania kryptowaluty jako \u015brodka p\u0142atniczego, ale mo\u017cna j\u0105 posiada\u0107 jako pewnego rodzaju aktyw cyfrowy, podobnie jak papiery warto\u015bciowe. Takie aktywa mo\u017cna kupowa\u0107 i sprzedawa\u0107 na gie\u0142dzie. W ka\u017cdym przypadku, projektuj\u0105c projekt zwi\u0105zany z kryptowalutami, konieczne jest zapoznanie si\u0119 z ustawodawstwem kraju, w kt\u00f3rego jurysdykcji znajduje si\u0119 tw\u00f3j projekt.<\/p>\n<h3>Jak formuje si\u0119 \u0142a\u0144cuch blockchaina<\/h3>\n<p>\nJak ju\u017c wspomnieli\u015bmy, blockchain to prosta sekwencja blok\u00f3w danych. Najpierw tworzy si\u0119 pierwszy blok w tej sekwencji, nast\u0119pnie dodaje si\u0119 do niego drugi i tak dalej. Zak\u0142ada si\u0119, \u017ce dane transakcji s\u0105 przechowywane w blokach i dodawane do ostatniego bloku.<\/p>\n<p>Na rys. 1.1 przedstawili\u015bmy najprostszy wariant sekwencji blok\u00f3w, w kt\u00f3rym pierwszy blok odnosi si\u0119 do nast\u0119pnego. <\/p>\n<p><img decoding=\"async\" alt=\"Ksi\u0105\u017cka \u201eTworzenie smart kontrakt\u00f3w Solidity dla blockchaina Ethereum. Praktyczny przewodnik\u201d\" src=\"\/wp-content\/uploads\/2019\/10\/23ca04ba2c8914334032523d01bf8b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Rys. 1.1. Prosta sekwencja blok\u00f3w<\/i><\/p>\n<p>W takim wariancie jednak mo\u017cna bardzo \u0142atwo podrobi\u0107 zawarto\u015b\u0107 dowolnego bloku w \u0142a\u0144cuchu, poniewa\u017c bloki nie zawieraj\u0105 \u017cadnych informacji chroni\u0105cych przed zmianami. Bior\u0105c pod uwag\u0119, \u017ce blockchain jest przeznaczony do u\u017cytku przez ludzi i firmy, mi\u0119dzy kt\u00f3rymi nie ma zaufania, mo\u017cna stwierdzi\u0107, \u017ce taki spos\u00f3b przechowywania danych nie nadaje si\u0119 do blockchaina.<\/p>\n<p>Zajmijmy si\u0119 zabezpieczeniem blok\u00f3w przed podr\u00f3bkami. Na pierwszym etapie spr\u00f3bujemy zabezpieczy\u0107 ka\u017cdy blok sum\u0105 kontroln\u0105 (rys. 1.2).<\/p>\n<p><img decoding=\"async\" alt=\"Ksi\u0105\u017cka \u201eTworzenie smart kontrakt\u00f3w Solidity dla blockchaina Ethereum. Praktyczny przewodnik\u201d\" src=\"\/wp-content\/uploads\/2019\/10\/141502accec14e868a9382c612cfc791.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Rys. 1.2. Dodajemy zabezpieczenie danych blok\u00f3w sum\u0105 kontroln\u0105<\/i><\/p>\n<p>Teraz intruz nie mo\u017ce po prostu zmieni\u0107 bloku, poniewa\u017c zawiera on sum\u0119 kontroln\u0105 danych bloku. Weryfikacja sumy kontrolnej poka\u017ce, \u017ce dane zosta\u0142y zmienione.<\/p>\n<p>Do obliczenia sumy kontrolnej mo\u017cna u\u017cy\u0107 jednej z funkcji hashuj\u0105cych, takich jak MD-5, SHA-1, SHA-256 itp. Funkcje hashuj\u0105ce obliczaj\u0105 pewn\u0105 warto\u015b\u0107 (na przyk\u0142ad w postaci sta\u0142ej d\u0142ugo\u015bci ci\u0105gu tekstowego) w wyniku wykonywania nieodwracalnych operacji na bloku danych. Operacje te zale\u017c\u0105 od rodzaju funkcji hashuj\u0105cej. <\/p>\n<p>Nawet przy niewielkiej zmianie zawarto\u015bci bloku danych warto\u015b\u0107 funkcji hashuj\u0105cej r\u00f3wnie\u017c si\u0119 zmieni. Analizuj\u0105c warto\u015b\u0107 funkcji hashuj\u0105cej, nie mo\u017cna odtworzy\u0107 bloku danych, dla kt\u00f3rego zosta\u0142a obliczona.<\/p>\n<p>Czy taka ochrona b\u0119dzie wystarczaj\u0105ca? Niestety, nie.<\/p>\n<p>W tym schemacie suma kontrolna (funkcja hashuj\u0105ca) chroni tylko poszczeg\u00f3lne bloki, ale nie ca\u0142y \u0142a\u0144cuch blok\u00f3w. Znaj\u0105c algorytm obliczania funkcji hashuj\u0105cej, intruz mo\u017ce \u0142atwo podmieni\u0107 zawarto\u015b\u0107 bloku. Nic r\u00f3wnie\u017c nie powstrzyma go przed usuni\u0119ciem blok\u00f3w z \u0142a\u0144cucha lub dodaniem nowych.<\/p>\n<p>Aby chroni\u0107 ca\u0142y \u0142a\u0144cuch jako ca\u0142o\u015b\u0107, mo\u017cna przechowywa\u0107 w ka\u017cdym bloku razem z danymi r\u00f3wnie\u017c hash danych poprzedniego bloku (rys. 1.3).<\/p>\n<p><img decoding=\"async\" alt=\"Ksi\u0105\u017cka \u201eTworzenie smart kontrakt\u00f3w Solidity dla blockchaina Ethereum. Praktyczny przewodnik\u201d\" src=\"\/wp-content\/uploads\/2019\/10\/f414ab67dbabc763c537a430e01ed065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Rys. 1.3. Dodajemy do bloku danych hash poprzedniego bloku<\/i><\/p>\n<p>W tym schemacie, aby zmieni\u0107 jaki\u015b blok, nale\u017cy przeliczy\u0107 funkcje haszuj\u0105ce wszystkich kolejnych blok\u00f3w. Wydaje si\u0119, \u017ce w czym tkwi problem?<\/p>\n<p>W rzeczywistych blockchainach dodatkowo stworzono sztuczne trudno\u015bci dla dodawania nowych blok\u00f3w \u2014 wykorzystuje si\u0119 algorytmy wymagaj\u0105ce du\u017cych zasob\u00f3w obliczeniowych. Bior\u0105c pod uwag\u0119, \u017ce dla wprowadzenia zmian w bloku nale\u017cy przeliczy\u0107 nie tylko ten blok, ale wszystkie kolejne, zrealizowanie tego b\u0119dzie niezwykle trudne.<\/p>\n<p>Przypomnijmy r\u00f3wnie\u017c, \u017ce dane blockchaina s\u0105 przechowywane (duplikowane) na licznych w\u0119z\u0142ach sieci, tzn. wykorzystuje si\u0119 zdecentralizowane przechowywanie. To wielokrotnie komplikuje fa\u0142szowanie bloku, poniewa\u017c zmiany nale\u017cy wprowadzi\u0107 we wszystkich w\u0119z\u0142ach sieci.<\/p>\n<p>Poniewa\u017c bloki zawieraj\u0105 informacje o poprzednim bloku, mo\u017cna zweryfikowa\u0107 zawarto\u015b\u0107 wszystkich blok\u00f3w w \u0142a\u0144cuchu.<\/p>\n<h3>Blockchain Ethereum<\/h3>\n<p>\nBlockchain Ethereum jest platform\u0105, na kt\u00f3rej mo\u017cna tworzy\u0107 rozproszone aplikacje DApp. W przeciwie\u0144stwie do innych platform, Ethereum umo\u017cliwia korzystanie z tzw. inteligentnych kontrakt\u00f3w (smart contracts), napisanych w j\u0119zyku programowania Solidity.<\/p>\n<p>Platforma ta zosta\u0142a stworzona w 2013 roku przez Vitalika Buterina, za\u0142o\u017cyciela czasopisma Bitcoin Magazine, i uruchomiona w 2015 roku. Wszystko, co b\u0119dziemy studiowa\u0107 lub robi\u0107 w naszym kursie, ma zwi\u0105zek w\u0142a\u015bnie z blockchainem Ethereum i inteligentnymi kontraktami Solidity.<\/p>\n<h3>Mining, czyli jak powstaj\u0105 bloki<\/h3>\n<p>\nMining (kopanie) to stosunkowo skomplikowany i zasoboch\u0142onny proces dodawania nowych blok\u00f3w do \u0142a\u0144cucha blockchaina, a nie \u201ewydobywanie kryptowalut\u201d. Mining zapewnia dzia\u0142anie blockchaina, poniewa\u017c to w\u0142a\u015bnie ten proces odpowiada za dodawanie transakcji do blockchaina Ethereum.<\/p>\n<p>Osoby i organizacje zajmuj\u0105ce si\u0119 dodawaniem blok\u00f3w nazywane s\u0105 minerami.<br \/>\nOprogramowanie (SO), dzia\u0142aj\u0105ce na w\u0119z\u0142ach miner\u00f3w, pr\u00f3buje dobra\u0107 dla ostatniego bloku parametr haszowania nazwany Nonce, aby uzyska\u0107 okre\u015blon\u0105 warto\u015b\u0107 funkcji haszuj\u0105cej, zdefiniowanej przez sie\u0107. Algorytm haszowania Ethash, stosowany w Ethereum, pozwala na uzyskanie warto\u015bci Nonce tylko w drodze sekwencyjnego przeszukiwania. <\/p>\n<p>Je\u015bli w\u0119ze\u0142 g\u00f3rnika znalaz\u0142 poprawn\u0105 warto\u015b\u0107 Nonce, to jest to tzw. dow\u00f3d pracy (PoW, Proof-of-work). W takim przypadku, je\u015bli blok zostanie dodany do sieci Ethereum, g\u00f3rnik otrzymuje okre\u015blon\u0105 nagrod\u0119 w walucie sieci \u2014 Ether. W momencie pisania naszej ksi\u0105\u017cki nagroda wynosi 5 Ether, jednak z czasem zostanie zmniejszona.<\/p>\n<p>W ten spos\u00f3b g\u00f3rnicy Ethereum zapewniaj\u0105 dzia\u0142anie sieci, dodaj\u0105c bloki i otrzymuj\u0105c za to kryptowaluty. W Internecie znajdziesz mn\u00f3stwo informacji na temat g\u00f3rnik\u00f3w i wydobywania, a my skoncentrujemy si\u0119 na tworzeniu kontrakt\u00f3w Solidity i zdecentralizowanych aplikacji DApp w sieci Ethereum.<\/p>\n<h3>Podsumowanie lekcji<\/h3>\n<p>\nNa pierwszej lekcji zapozna\u0142e\u015b si\u0119 z blockchainem i dowiedzia\u0142e\u015b si\u0119, \u017ce jest to szczeg\u00f3lnie u\u0142o\u017cona sekwencja blok\u00f3w. Zawarto\u015bci wcze\u015bniej zapisanych blok\u00f3w nie mo\u017cna zmieni\u0107, poniewa\u017c konieczne by\u0142oby przeliczenie wszystkich kolejnych blok\u00f3w na wielu w\u0119z\u0142ach sieci, co wymaga wielu zasob\u00f3w i czasu.<\/p>\n<p>Blockchain mo\u017ce by\u0107 stosowany do przechowywania wynik\u00f3w realizacji transakcji. Jego g\u0142\u00f3wnym celem jest organizacja bezpiecznego przeprowadzania transakcji mi\u0119dzy stronami (osobami i organizacjami), mi\u0119dzy kt\u00f3rymi nie ma zaufania. Dowiedzia\u0142e\u015b si\u0119, w jakich konkretnie dziedzinach biznesu i w jakich obszarach mo\u017cna wykorzysta\u0107 blockchain Ethereum i smart kontrakty Solidity. Nale\u017cy do nich sektor bankowy, rejestracja praw w\u0142asno\u015bci, dokument\u00f3w itp.<\/p>\n<p>Dowiedzia\u0142e\u015b si\u0119 r\u00f3wnie\u017c, \u017ce podczas korzystania z blockchaina mog\u0105 wyst\u0105pi\u0107 r\u00f3\u017cne problemy. S\u0105 to problemy weryfikacji informacji dodawanych do blockchaina, szybko\u015b\u0107 dzia\u0142ania blockchaina, koszt transakcji, problem wymiany danych mi\u0119dzy smart kontraktami a rzeczywistym \u015bwiatem, a tak\u017ce potencjalne ataki haker\u00f3w maj\u0105ce na celu kradzie\u017c \u015brodk\u00f3w kryptowalutowych z kont u\u017cytkownik\u00f3w.<\/p>\n<p>Kr\u00f3tko om\u00f3wili\u015bmy tak\u017ce wydobywanie jako proces dodawania nowych blok\u00f3w do blockchaina. Wydobywanie jest niezb\u0119dne do realizacji transakcji. Ci, kt\u00f3rzy zajmuj\u0105 si\u0119 wydobywaniem, zapewniaj\u0105 dzia\u0142anie blockchaina i otrzymuj\u0105 za to nagrod\u0119 w kryptowalucie.<\/p>\n<p><b class=\"spoiler_title\">Lekcja 2. Przygotowanie \u015brodowiska roboczego w systemach Ubuntu i Debian<\/b>Wyb\u00f3r systemu operacyjnego<br \/>\nInstalacja niezb\u0119dnych narz\u0119dzi<br \/>\nInstalacja Geth i Swarm w Ubuntu<br \/>\nInstalacja Geth i Swarm w Debianie<br \/>\nSerwer bazy danych Firebird 3.0 dynamicznie alokuje i zwalnia pami\u0119\u0107 systemow\u0105, co mo\u017ce prowadzi\u0107 do jej fragmentacji. Na przyk\u0142ad, po jednoczesnym od\u0142\u0105czeniu du\u017cej liczby u\u017cytkownik\u00f3w od superserwera, mog\u0105 pojawi\u0107 si\u0119 b\u0142\u0119dy przy nowych po\u0142\u0105czeniach.<br \/>\n\u0141adowanie dystrybucji Go<br \/>\nUstawianie zmiennych \u015brodowiskowych<br \/>\nSprawdzanie wersji Go<br \/>\nInstalacja Geth i Swarm<br \/>\nTworzenie prywatnego blockchaina<br \/>\n\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0430\u0439\u043b genesis.json<br \/>\nTworzenie katalogu do pracy<br \/>\nTworzenie konta<br \/>\nRozpoczynamy inicjalizacj\u0119 w\u0119z\u0142a<br \/>\nParametry uruchamiania w\u0119z\u0142a<br \/>\n\u0141\u0105czenie z naszym w\u0119z\u0142em<br \/>\nZarz\u0105dzanie wydobywaniem i sprawdzanie salda<br \/>\nZako\u0144czenie pracy konsoli Geth<br \/>\nPodsumowanie lekcji<\/p>\n<p><b class=\"spoiler_title\">Lekcja 3. Przygotowanie \u015brodowiska roboczego na Raspberry Pi 3<\/b>Przygotowanie Raspberry Pi 3 do pracy<br \/>\nInstalacja Raspbian<br \/>\nInstalacja aktualizacji<br \/>\nW\u0142\u0105czenie dost\u0119pu SSH<br \/>\nUstawienie statycznego adresu IP<br \/>\nInstalacja niezb\u0119dnych narz\u0119dzi<br \/>\nInstalacja Go<br \/>\n\u0141adowanie dystrybucji Go<br \/>\nUstawianie zmiennych \u015brodowiskowych<br \/>\nSprawdzanie wersji Go<br \/>\nInstalacja Geth i Swarm<br \/>\nTworzenie prywatnego blockchaina<br \/>\nSprawdzanie konta i salda<br \/>\nPodsumowanie lekcji<\/p>\n<p><b class=\"spoiler_title\">Lekcja 4. Konta i transfery \u015brodk\u00f3w mi\u0119dzy kontami<\/b>Przegl\u0105danie i dodawanie kont<br \/>\nPrzegl\u0105danie listy kont<br \/>\nDodawanie konta<br \/>\nParametry komendy geth account<br \/>\nHas\u0142a kont<br \/>\nKryptowaluta w Ethereum<br \/>\nJednostki monetarne Ethereum<br \/>\nOkre\u015blanie bie\u017c\u0105cego salda naszych kont<br \/>\nTransfer \u015brodk\u00f3w z jednego konta na drugie<br \/>\nMetoda eth.sendTransaction<br \/>\nSprawdzanie stanu transakcji<br \/>\nKwita transakcji<br \/>\nPodsumowanie lekcji<\/p>\n<p><b class=\"spoiler_title\">Lekcja 5. Publikacja pierwszego kontraktu<\/b>Smart kontrakty w Ethereum<br \/>\nWykonywanie smart kontraktu<br \/>\nWirtualna maszyna Ethereum<br \/>\nZintegrowane \u015brodowisko programistyczne Remix Solidity IDE<br \/>\nUruchomienie kompilacji<br \/>\nWywo\u0142ywanie funkcji kontraktu<br \/>\nPublikacja kontraktu w prywatnej sieci<br \/>\nUzyskanie definicji ABI i kodu binarnego kontraktu<br \/>\nPublikacja kontraktu<br \/>\nSprawdzanie stanu transakcji publikacji kontraktu<br \/>\nWywo\u0142ywanie funkcji kontraktu<br \/>\nKompilator pakiet\u00f3w solc<br \/>\nInstalacja solc w Ubuntu<br \/>\nInstalacja solc w Debianie<br \/>\nKompilacja kontraktu HelloSol<br \/>\nPublikacja kontraktu<br \/>\nInstalacja solc na Raspbianie<br \/>\nPodsumowanie lekcji<\/p>\n<p><b class=\"spoiler_title\">\u0423\u0440\u043e\u043a 6. \u0421\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u0438 Node.js<\/b>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Node.js<br \/>\nInstalacja w Ubuntu<br \/>\nInstalacja w Debianie<br \/>\nInstalacja i uruchamianie Ganache-cli<br \/>\nInstalacja Web3<br \/>\nInstalacja solc<br \/>\nInstalacja Node.js na Raspbianie<br \/>\nSkrypt do uzyskiwania listy kont w konsoli<br \/>\nSkrypt do publikacji smart kontraktu<br \/>\nUruchamianie i uzyskiwanie parametr\u00f3w<br \/>\nUzyskiwanie parametr\u00f3w uruchamiania<br \/>\nKompilacja kontraktu<br \/>\nOdblokowanie konta<br \/>\n\u0141adowanie ABI i kodu binarnego kontraktu<br \/>\nOcena wymaganego poziomu gazu<br \/>\nTworzenie obiektu i uruchamianie publikacji kontraktu<br \/>\nUruchamianie skryptu publikacji kontraktu<br \/>\nWywo\u0142ywanie funkcji smart kontraktu<br \/>\nCzy mo\u017cliwe jest zaktualizowanie opublikowanego smart kontraktu<br \/>\nPraca z Web3 wersji 1.0.x<br \/>\nUzyskiwanie listy kont<br \/>\nPublikacja kontraktu<br \/>\nWywo\u0142ywanie funkcji kontraktu<br \/>\nTransfer \u015brodk\u00f3w z jednego konta na drugie<br \/>\nTransfer \u015brodk\u00f3w na konto kontraktu<br \/>\nAktualizujemy smart kontrakt HelloSol<br \/>\nTworzenie skryptu do przegl\u0105dania salda konta<br \/>\n\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 getBalance \u0432 \u0441\u043a\u0440\u0438\u043f\u0442 call_contract_get_promise.js<br \/>\nZasilanie konta smart kontraktu<br \/>\nPodsumowanie lekcji<\/p>\n<p><b class=\"spoiler_title\">Lekcja 7. Wprowadzenie do Truffle<\/b>Instalacja Truffle<br \/>\nTworzenie projektu HelloSol<br \/>\nTworzenie katalogu i plik\u00f3w projektu<br \/>\nKatalog kontrakt\u00f3w<br \/>\nKatalog migracji<br \/>\nKatalog testowy<br \/>\n\u0424\u0430\u0439\u043b truffle-config.js<br \/>\nKompilacja kontraktu HelloSol<br \/>\nRozpocz\u0119cie publikacji kontraktu<br \/>\nWywo\u0142anie funkcji kontraktu HelloSol w zaproszeniu Truffle<br \/>\n\u0412\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 HelloSol \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 JavaScript \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Node.js<br \/>\nInstalacja modu\u0142u truffle-contract<br \/>\nWywo\u0142anie funkcji kontraktu getValue i getString<br \/>\nWywo\u0142anie funkcji kontraktu setValue i setString<br \/>\nZmiana kontraktu i ponowna publikacja<br \/>\nPraca z Web3 wersji 1.0.x<br \/>\nWprowadzanie zmian w inteligentnym kontrakcie HelloSol<br \/>\nSkrypty do wywo\u0142ywania metod kontraktu<br \/>\nTestowanie w Truffle<br \/>\nTest w Solidity<br \/>\nTest w JavaScript<br \/>\nPodsumowanie lekcji<\/p>\n<p><b class=\"spoiler_title\">Lekcja 8. Typy danych w Solidity<\/b>Kontrakt do nauki typ\u00f3w danych<br \/>\nLogiczne typy danych<br \/>\nLiczby ca\u0142kowite bez znaku i ca\u0142kowite ze znakiem<br \/>\nLiczby sta\u0142o-przecinkowe<br \/>\nAdres<br \/>\nZmienne typ\u00f3w z\u0142o\u017conych<br \/>\nTablice o sta\u0142ej wielko\u015bci<br \/>\nTablice dynamiczne<br \/>\nWypisanie<br \/>\nStruktury<br \/>\nMapowania<br \/>\nPodsumowanie lekcji<\/p>\n<p><b class=\"spoiler_title\">Lekcja 9. Migracja kontrakt\u00f3w do prywatnej sieci i sieci Rinkeby<\/b>Publikacja kontraktu z Truffle do prywatnej sieci Geth<br \/>\nPrzygotowanie w\u0119z\u0142a prywatnej sieci<br \/>\nPrzygotowanie kontraktu do pracy<br \/>\nKompilacja i migracja kontraktu do sieci Truffle<br \/>\nRozpocz\u0119cie migracji w lokalnej sieci geth<br \/>\nWydobywanie artefakt\u00f3w Truffle<br \/>\nPublikacja kontraktu z Truffle w testowej sieci Rinkeby<br \/>\nPrzygotowanie w\u0119z\u0142a Geth do pracy z Rinkeby<br \/>\nSynchronizacja w\u0119z\u0142a<br \/>\nDodawanie kont<br \/>\nDo\u0142adowanie konta Rinkeby eterem<br \/>\nRozpocz\u0119cie migracji kontraktu do sieci Rinkeby<br \/>\nWy\u015bwietlanie informacji o kontrakcie w sieci Rinkeby<br \/>\nKonsola Truffle dla sieci Rinkeby<br \/>\nBardziej wydajny spos\u00f3b wywo\u0142ania funkcji kontraktu<br \/>\n\u0412\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Node.js<br \/>\nPrzesy\u0142anie \u015brodk\u00f3w mi\u0119dzy kontami w konsoli Truffle dla Rinkeby<br \/>\nPodsumowanie lekcji<\/p>\n<p><b class=\"spoiler_title\">Lekcja 10. Zdecentralizowane przechowywanie danych Ethereum Swarm<\/b>Jak dzia\u0142a Ethereum Swarm<br \/>\nInstalacja i uruchomienie Swarm<br \/>\nOperacje z plikami i katalogami<br \/>\nPrzesy\u0142anie pliku do Ethereum Swarm<br \/>\nOdczytywanie pliku z Ethereum Swarm<br \/>\nPrzegl\u0105danie manifestu przes\u0142anego pliku<br \/>\nPrzesy\u0142anie katalog\u00f3w z podkatalogami<br \/>\nOdczytywanie pliku z przes\u0142anego katalogu<br \/>\nKorzystanie z publicznego bramy Swarm<br \/>\n\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a Swarm \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 Node.js<br \/>\nModu\u0142 Perl Net::Ethereum::Swarm<br \/>\nInstalacja modu\u0142u Net::Ethereum::Swarm<br \/>\nZapis i odczyt danych<br \/>\nPodsumowanie lekcji<\/p>\n<p><b class=\"spoiler_title\">Lekcja 11. Framework Web3.py do pracy z Ethereum w Pythonie<\/b>Instalacja Web3.py<br \/>\nAktualizacja i instalacja wymaganych pakiet\u00f3w<br \/>\nInstalacja modu\u0142u easysolc<br \/>\nPublikacja kontraktu za pomoc\u0105 Web3.py<br \/>\nKompilacja kontraktu<br \/>\nPod\u0142\u0105czenie do dostawcy<br \/>\nWykonanie publikacji kontraktu<br \/>\nZapisanie adresu kontraktu i abi w pliku<br \/>\nUruchamianie skryptu publikacji kontraktu<br \/>\nWywo\u0142anie metod kontraktu<br \/>\nOdczyt adresu i abi kontraktu z pliku JSON<br \/>\nPod\u0142\u0105czenie do dostawcy<br \/>\nTworzenie obiektu kontraktu<br \/>\nWywo\u0142anie metod kontraktu<br \/>\nTruffle i Web3.py<br \/>\nPodsumowanie lekcji<\/p>\n<p><b class=\"spoiler_title\">Lekcja 12. Oracle<\/b>Czy inteligentny kontrakt mo\u017ce ufa\u0107 danym zewn\u0119trznym?<br \/>\nOrakuly jako po\u015brednicy informacji w blockchainie<br \/>\n\u0179r\u00f3d\u0142o danych<br \/>\nKod do reprezentacji danych ze \u017ar\u00f3d\u0142a<br \/>\nOrakl do zapisywania kursu wymiany w blockchainie<br \/>\nKontrakt USDRateOracle<br \/>\nAktualizacja kursu wymiany w smart kontrakcie<br \/>\nU\u017cycie dostawcy Web Socket<br \/>\nOczekiwanie na zdarzenie RateUpdate<br \/>\nPrzetwarzanie zdarzenia RateUpdate<br \/>\nInicjowanie aktualizacji danych w smart kontrakcie<br \/>\nPodsumowanie lekcji<\/p>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/467347\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434 \u043a\u043d\u0438\u0433\u043e\u0439 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb, \u0438 \u0432\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430, \u0430 \u043a\u043d\u0438\u0433\u0430 \u0438\u0437\u0434\u0430\u043d\u0430 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u041b\u0438\u0442\u0440\u0435\u0441\u0435. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043c\u043e\u044f \u043a\u043d\u0438\u0433\u0430 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 Solidity \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 DApp \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041e\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 12 \u0443\u0440\u043e\u043a\u043e\u0432 \u0441 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f\u043c\u0438. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0438\u0445, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29275,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-39018","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043d\u0438\u0433\u0430 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:27:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:27:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Ksi\u0105\u017cka \u201eTworzenie smart kontrakt\u00f3w Solidity dla blockchaina Ethereum. Praktyczny przewodnik\u201d | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043d\u0438\u0433\u0430 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb | ProHoster","og:url":"https:\/\/prohoster.info\/pl\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:27:25+00:00","article:modified_time":"2019-10-31T19:27:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"39018","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 00:24:24","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:58:39","updated":"2026-01-24 00:24:24","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/39018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=39018"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/39018\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/29275"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=39018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=39018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=39018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}