Кніга «Стварэнне смарт-кантрактаў Solidity для блокчейна Ethereum. Практычнае кіраўніцтва»

Кніга «Стварэнне смарт-кантрактаў Solidity для блокчейна Ethereum. Практычнае кіраўніцтва»
Больш за год я працаваў над кнігай «Стварэнне смарт-кантрактаў Solidity для блокчейна Ethereum. Практычнае кіраўніцтва», і вось зараз гэтая праца завершана, а кніга выдадзена і даступна ў Літрэсе.

Спадзяюся, мая кніга дапаможа хутка прыступіць да стварэння смарт-кантактаў Solidity і размеркаваных прыкладанняў DApp для блокчейна Ethereum. Яна складаецца з 12 урокаў з практычнымі заданнямі. Выканаўшы іх, чытач зможа ствараць уласныя лакальныя вузлы Ethereum, публікаваць смарт-кантракты і выклікаць іх метады, абменьвацца дадзенымі паміж рэальным светам і смарт-кантрактамі з дапамогай аракулаў, працаваць з тэставай адладкавай сеткай Rinkeby.

Кніга адрасавана ўсім, хто цікавіцца перадавымі тэхналогіямі ў галіне блокчейнов і хоча хутка атрымаць веды, якія дазваляюць займацца цікавай і перспектыўнай працай.

Ніжэй вы знойдзеце змест і першы раздзел кнігі (таксама на Літрэс даступныя фрагменты кнігі). Спадзяюся атрымаць зваротную сувязь, заўвагі і прапановы. Усё гэта я пастараюся ўлічыць пры падрыхтоўцы наступнай рэдакцыі кнігі.

ЗместУвядзеннеНаша кніга прызначана для тых, хто хоча не толькі зразумець прынцыпы працы блокчейна Ethereum, але і атрымаць практычныя навыкі ў стварэнні размеркаваных дадаткаў DApp на мове праграмавання Solidity для гэтай сеткі.

Гэтую кнігу лепш не проста чытаць, а працаваць з ёй, выконваючы практычныя заданні, апісаныя ва ўроках. Для працы вам запатрабуецца лакальны кампутар, віртуальны ці хмарны сервер з усталяванай АС Debian ці Ubuntu. Таксама для выканання шматлікіх заданняў можна выкарыстоўваць Raspberry Pi.

На першым уроку мы разгледзім прынцыпы працы блокчейна Ethereum і асноўную тэрміналогію, а таксама раскажам пра тое, дзе можна выкарыстоўваць гэты блокчейн.

Мэта другога ўрока - стварыць вузел прыватнага блокчейна Ethereum для далейшай працы ў рамках гэтага курса на серверы Ubuntu і Debian. Мы разгледзім асаблівасці ўстаноўкі асноўных утыліт, такіх як geth, які забяспечвае працу вузла нашага блокчейна, а таксама дэмана дэцэнтралізаванага сховішчы дадзеных swarm.

Трэці ўрок навучыць вас праводзіць эксперыменты з Ethereum на недарагім мікракампутары Raspberry Pi. Вы ўсталюеце аперацыйную сістэму (АС) Rasberian на Raspberry Pi, утыліту Geth, якая забяспечвае працу вузла блокчейна, а таксама дэман дэцэнтралізаванага сховішчы дадзеных Swarm.

Чацвёрты ўрок прысвечаны акаўнтам і криптовалютным адзінкам у сетцы Ethereum, а таксама спосабам перакладу сродкаў з аднаго акаўнта на іншы з кансолі Geth. Вы навучыцеся ствараць акаўнты, ініцыяваць транзакцыі пераводу сродкаў, атрымліваць стан транзакцыі і яе квітанцыю.

На пятым уроку вы пазнаёміцеся са смарт-кантрактамі ў сетцы Ethereum, даведаецеся пра іх выкананне віртуальнай машынай Ethereum.

Вы створыце і апублікуеце ў прыватнай сетцы Ethereum свой першы смарт-кантракт і навучыцеся выклікаць яго функцыі. Для гэтага вы будзеце выкарыстоўваць асяроддзе распрацоўкі Remix Solidity IDE. Акрамя таго, вы навучыцеся ўсталёўваць і выкарыстоўваць пакетны кампілятар solc.
Таксама мы раскажам аб так званым бінарным інтэрфейсе прыкладання Application Binary Interface (ABI) і навучым яго выкарыстоўваць.

Шосты ўрок прысвечаны стварэнню скрыптоў JavaScript, якія працуюць пад кіраваннем Node.js і выконваюць аперацыі са смарт-кантрактамі Solidity.

Вы ўсталюеце Node.js у АС Ubuntu, Debian і Rasberian, напішаце скрыпты для публікацыі смарт-кантракту ў лакальнай сетцы Ethereum і выкліку яго функцый.

Акрамя таго, вы навучыцеся перакладаць з дапамогай скрыптоў сродкі паміж звычайнымі акаўнтамі, а таксама залічаць іх на акаўнты смарт-кантрактаў.

На сёмым уроку вы навучыцеся ўсталёўваць і выкарыстоўваць папулярную сярод распрацоўшчыкаў смарт-кантрактаў Solidity інтэграванае асяроддзе Truffle. Вы навучыцеся ствараць скрыпты JavaScript, якія выклікаюць функцыі кантрактаў з дапамогай модуля truffle-contract, а таксама выканайце тэставанне свайго смарт-кантракта сродкамі Truffle.

Восьмы ўрок прысвечаны тыпам дадзеных Solidity. Вы напішаце смарт-кантракты, якія працуюць з такімі тыпамі дадзеных, як знакавыя і беззнакавыя цэлыя лікі, лікі са знакам, радкі, адрасы, зменныя складаных тыпаў, масівы, пералічэнні, структуры і слоўнікі.

На дзявятым уроку вы наблізіцеся яшчэ на крок да стварэння смарт-кантрактаў для асноўнай сеткі Ethereum. Вы навучыцеся публікаваць кантракты пры дапамозе Truffle у прыватнай сетцы Geth, а таксама ў тэставай сетцы Rinkeby. Адладка смарт-кантракту ў сетцы Rinkeby вельмі карысная перад яго публікацыяй у асноўнай сетцы - там практычна ўсё па-сапраўднаму, але бясплатна.

У рамках урока вы створыце вузел тэставай сеткі Rinkeby, папоўніце яго сродкамі, і апублікуеце смарт-кантракт.

ўрок 10 прысвечаны размеркаваным сховішчам дадзеных Ethereum Swarm. Выкарыстоўваючы размеркаваныя сховішчы, вы эканоміце на захоўванні дадзеных вялікага аб'ёму ў блокчейне Ethereum.

У рамках гэтага ўрока вы створыце лакальнае сховішча Swarm, выканайце аперацыі запісу і чытанні файлаў, а таксама каталогаў з файламі. Далей вы навучыцеся працаваць з публічным шлюзам Swarm, напішыце скрыпты для звароту да Swarm з Node.js, а таксама з дапамогай модуля Perl Net::Ethereum::Swarm.

Мэта ўрока 11 - асвоіць працу са смарт-кантрактамі Solidity c ужываннем папулярнай мовы праграмавання Python і фрэймворка Web3.py. Вы ўсталюеце гэты фрэймворк, напішыце скрыпты для кампіляцыі і публікацыі смарт-кантракту, а таксама для выкліку яго функцый. Пры гэтым Web3.py будзе скарыстаны як сам па сабе, так і сумесна з інтэграваным асяроддзем распрацоўкі Truffle.

На 12 уроку вы навучыцеся перадаваць дадзеныя паміж смарт-кантрактамі і рэальным светам пры дапамозе аракулаў. Гэта спатрэбіцца вам для атрымання дадзеных з Web-сайтаў, прыладаў інтэрнэту рэчаў IoT, розных прыбораў і датчыкаў, і адпраўкі дадзеных з смарт-кантрактаў на гэтыя прылады. У практычнай частцы ўрока вы створыце аракул і смарт-кантракт, які атрымлівае актуальны курс абмену USD на рублі з сайта ЦБ РФ.

Урок 1. Коратка аб блокчейне і сеткі EthereumМэта ўрока: пазнаёміцца ​​з прынцыпамі працы блокчейна Ethereum, абласцямі яго прымянення і асноўнай тэрміналогіяй.
Практычныя заданні: у гэтым уроку не прадугледжаны.

Ці ледзь сёння ёсць распрацоўнік праграмнага забеспячэння (ПА), які б нічога не чуў аб тэхналогіі блокчейн (Blockchain), криптовалютах (Cryptocurrency або Crypto Currency), біткоінах (Bitcoin), першасным размяшчэнне манет (ICO, Initial coin offering), смарт-кантрактах (Smart Contract), а таксама іншых паняццях і тэрмінах, якія маюць дачыненне да блокчейна.

Тэхналогія блокчейна адчыняе новыя рынкі і стварае працоўныя месцы для праграмістаў. Калі вы напаткаеце ўсе тонкасці криптовалютных тэхналогій і тэхналогій смарт-кантрактаў, то ў вас не павінна быць праблем з ужываннем гэтых ведаў на практыцы.

Трэба сказаць, што вакол криптовалют і блокчейнов узнікае шмат спекуляцый. Мы пакінем у баку развагі аб зменах курсаў крыптавалют, аб стварэнні пірамід, аб тонкасцях крыптавалютнага заканадаўства і да т.п. У нашым навучальным курсе мы засяродзімся галоўным чынам на тэхнічных аспектах прымянення смарт-кантрактаў блокчейна Ethereum (эфірыум, эфір) і распрацоўкі так званых дэцэнтралізаваных прыкладанняў (Distributed Application, DApp).

Што такое блокчейн

Блокчейн (Blockchain, Block Chain) уяўляе сабой ланцужок блокаў дадзеных, звязаных адзін з адным пэўным чынам. У пачатку ланцужка знаходзіцца першы блок, які называецца першасным блокам (genesis block) або блокам генезісу. За ім ідзе другі, потым трэці і гэтак далей.

Усе гэтыя блокі дадзеных аўтаматычна дублююцца на шматлікіх вузлах сеткі блокчейна. Такім чынам забяспечваецца дэцэнтралізаванае захоўванне дадзеных блокчейна.
Вы можаце ўявіць сабе сістэму блокчейна як вялікая колькасць вузлоў (фізічных або віртуальных сервераў), аб'яднаных у сетку і якія рэпліцыруюць усе змены ў ланцужку блокаў дадзеных. Гэта як бы гіганцкі мультысерверны кампутар, прычым вузлы такога кампутара (серверы) могуць быць раскіданыя па ўсім свеце. І вы таксама можаце дадаць свой кампутар у сетку блокчейна.

Размеркаваная база даных

Блокчейн можна ўявіць сабе як размеркаваную базу дадзеных, якая рэплікуецца на ўсе вузлы сеткі блокчейна. У тэорыі блокчейн будзе працаздольны датуль, пакуль працуе хоць бы адзін вузел, які захоўвае ўсе блокі блокчейна.

Размеркаваны рэестр дадзеных

Блокчейн можна ўявіць сабе як гэта размеркаваны рэестр дадзеных і аперацый (транзакцый). Яшчэ адна назва такога рэестра - гросбух.

У размеркаваны рэестр можна дадаваць дадзеныя, але немагчыма іх змяняць ці выдаляць. Такая немагчымасць дасягаецца, у прыватнасці, ужываннем крыптаграфічных алгарытмаў, спецыяльных алгарытмаў дадання блокаў у ланцужок і дэцэнтралізаваным захоўваннем дадзеных.

Пры даданні блокаў і выкананні аперацый (транзакцый) выкарыстоўваюцца прыватныя і публічныя ключы. Яны абмяжоўваюць карыстальнікаў блокчейна, падаючы ім доступ толькі да сваіх блокаў дадзеных.

Транзакцыі

Блокчейн захоўвае інфармацыю аб аперацыях (транзакцыях) у блоках. Пры гэтым старыя, ужо выкананыя транзакцыі, немагчыма адкаціць ці змяніць. Новыя транзакцыі захоўваюцца ў новых, дабаўленых блоках.

Такім чынам у блокчейне можа быць запісана ў нязменным выглядзе ўся гісторыя транзакцый. Таму блокчэйн можа быць выкарыстаны, напрыклад, для надзейнага захоўвання банкаўскіх аперацый, звестак аб аўтарскім праве, гісторыю змен уладальнікаў аб'ектаў нерухомасці і да т.п.

Блокчейн Ethereum змяшчае так званыя станы сістэмы. Па меры выканання транзакцый стан змяняецца ад пачатковага да бягучага. Транзакцыі запісваюцца ў блокі.

Публічныя і прыватныя блокчэйны

Тут трэба адзначыць, што ўсё сказанае дакладна толькі для так званых публічных сетак блокчейн, якія не могуць кантралявацца ніякімі асобнымі фізічнымі ці юрыдычнымі асобамі, дзяржаўнымі органамі ці ўрадамі.
Так званыя прыватныя сеткі блокчэйн знаходзяцца пад поўным кантролем іх стваральнікаў, і там магчыма ўсё, напрыклад, поўная замена ўсіх блокаў ланцужка.

Практычныя прымянення блокчейна

Для чаго можа спатрэбіцца блокчэйн?

Калі коратка, блокчейн дазваляе бяспечнай выявай праводзіць аперацыі (здзелкі) паміж не давяраючымі адзін аднаму персонамі ці кампаніямі. Запісаныя ў блокчейн дадзеныя (транзакцыі, персанальныя дадзеныя, дакументы, пасведчанні, дамовы, накладныя і да т.п.) немагчыма падрабіць або замяніць пасля запісу. Таму на базе блокчейна можна ствараць, напрыклад, давераныя размеркаваныя рэестры рознага роду дакументаў.

Вядома, вы ведаеце, што на базе блокчейнов ствараюцца криптовалютные сістэмы, закліканыя замяніць звычайныя папяровыя грошы. Папяровыя грошы яшчэ завуць фіятнымі (ад Fiat Money).
Блокчейн забяспечвае захоўванне і нязменнасць транзакцый, запісаных у блокі, таму яго і можна выкарыстоўваць для стварэння криптовалютных сістэм. Ён змяшчае ўсю гісторыю перадачы крыпта-сродкаў паміж рознымі карыстальнікамі (акаўнтамі), прычым любая аперацыя можа быць адсочана.

Хоць аперацыі ўнутры криптовалютных сістэм могуць быць ананімнымі, выснова криптовалюты і абмен яе на фіятныя грошы звычайна прыводзіць да расчынення асобы ўладальніка криптовалютного актыву.

Так званыя смарт-кантракты, якія ўяўляюць сабой праграмнае забеспячэнне, якое працуе ў сетцы Ethereum, дазваляюць аўтаматызаваць працэс заключэння здзелак і кантроль іх выканання. Асабліва гэта эфектыўна, калі аплата па здзелцы праводзіцца криптовалютой Ether (эфір).

Блокчейн Ethereum і смарт-кантракты Ethereum, напісаныя на мове праграмавання Solidity, могуць выкарыстоўвацца, напрыклад, у такіх абласцях:

  • альтэрнатыва натарыяльнаму засведчанню дакументаў;
  • захоўванне рэестра аб'ектаў нерухомасці і звестак аб аперацыях з аб'ектамі нерухомасці;
  • захоўванне звестак аб аўтарскіх правах на аб'екты інтэлектуальнай уласнасці (кнігі, выявы, музычныя творы і да т.п.);
  • стварэнне сістэм незалежнага галасавання;
  • сфера фінансаў і банкаўская дзейнасць;
  • лагістыка ў міжнародных маштабах, адсочванне перамяшчэння грузаў;
  • захоўванне персанальных дадзеных як аналаг сістэме пасведчанняў асобы;
  • бяспечныя здзелкі ў камерцыйнай вобласці;
  • захоўванне вынікаў медыцынскіх абследаванняў, а таксама гісторыі прызначаных працэдур

Праблемы з блокчэйнам

Але, зразумела, не ўсё так проста, як магло б здацца!

Ёсць праблемы з верыфікацыяй дадзеных перад іх даданнем у блокчейн (напрыклад, ці не падробленыя яны?), праблемы ў бяспецы сістэмнага і прыкладнога ПА, які ўжываецца для працы з блокчейном, праблемы з магчымасцю выкарыстання метадаў сацыяльнай інжынерыі для выкрадання доступу да кашалькоў з криптовалютой і т.д. .п.

Ізноў жа, калі гаворка ідзе не аб публічным блокчейне, вузлы якога раскіданыя па ўсім свеце, а аб прыватным блокчейне, які належыць персоне або арганізацыі, то ўзровень даверу тут будзе не вышэй чым узровень даверу да гэтай персоны або гэтай арганізацыі.

Таксама варта ўлічваць, што дадзеныя, запісаныя ў блокчейн, становяцца даступныя для ўсіх. У гэтым сэнсе блокчейн (асабліва публічны) не падыходзіць для захоўвання канфідэнцыйнай інфармацыі. Аднак той факт, што інфармацыю ў блокчейне немагчыма змяніць, можа дапамагчы прадухіліць або расследаваць рознага роду ашуканскія дзеянні.

Дэцэнтралізаваныя прыкладанні Ethereum будуць зручныя, калі плаціць за іх выкарыстанне криптовалютой. Чым больш людзей, якія валодаюць криптовалютой ці гатовых яе набыць, тым большую папулярнасць атрымаюць прыкладанні DApp і смарт-кантракты.

Сярод агульных праблем блокчейна, якія абцяжарваюць яго практычнае ўжыванне, можна згадаць абмежаваную хуткасць дадання новых блокаў і адносна высокі кошт транзакцый. Але тэхналогіі ў гэтай галіне актыўна развіваюцца, і ёсць спадзяванні, што тэхнічныя праблемы з часам будуць вырашаны.

Яшчэ адна праблема складаецца ў тым, што смарт-кантракты блокчейна Ethereum працуюць у ізаляваным асяроддзі віртуальных машын, і не маюць доступу да дадзеных рэальнага свету. У прыватнасці, праграма смарт-кантракта не можа сама прачытаць дадзеныя з сайтаў ці якіх-небудзь фізічных прылад (датчыкі, кантакты і да т.п.), а таксама не можа вывесці дадзеныя на якія-небудзь вонкавыя прылады. Гэтую праблему і спосабы яе вырашэння мы будзем абмяркоўваць на ўроку, прысвечаным так званым Аракулам - інфармацыйным пасярэднікам смарт-кантрактаў.

Таксама ёсць абмежаванні ў сферы заканадаўства. У некаторых краінах, напрыклад, забараняецца выкарыстоўваць криптовалюту як плацежны сродак, але можна валодаць ёй як нейкім лічбавым актывам, накшталт каштоўных папер. Такія актывы можна набываць і прадаваць на біржы. У любым выпадку, пры стварэнні праекта, які працуе з крыптавалютамі, неабходна азнаёміцца ​​з заканадаўствам той краіны, пад юрысдыкцыю якой трапляе ваш праект.

Як фарміруецца ланцужок блокчейна

Як мы ўжо казалі, блокчейн уяўляе сабой просты ланцужок блокаў дадзеных. Спачатку фармуецца першы блок гэтага ланцужка, потым да яго дадаецца другі і гэтак далей. Мяркуецца, што дадзеныя транзакцый захоўваюцца ў блоках і дадаюцца ў самы апошні блок.

На мал. 1.1/XNUMX мы паказалі найпросты варыянт паслядоўнасці блокаў, дзе першы блок спасылаецца на наступны.

Кніга «Стварэнне смарт-кантрактаў Solidity для блокчейна Ethereum. Практычнае кіраўніцтва»
Мал. 1.1. Простая паслядоўнасць блокаў

У такім варыянце, аднак, можна вельмі лёгка падрабіць змесціва любога блока ланцужка, бо блокі не ўтрымоўваюць ніякай інфармацыі для абароны ад змен. Улічваючы, што блокчейн прызначаны для выкарыстання людзей і кампаній, паміж якімі няма даверу, можна зрабіць выснову, што такі спосаб захоўвання дадзеных для блокчэйна не падыходзіць.

Давайце зоймемся абаронай блокаў ад падробкі. На першым этапе мы паспрабуем абараніць кожны блок кантрольнай сумай (мал. 1.2).

Кніга «Стварэнне смарт-кантрактаў Solidity для блокчейна Ethereum. Практычнае кіраўніцтва»
Мал. 1.2. Дадаем абарону дадзеных блокаў кантрольнай сумай

Цяпер зламыснік не можа проста так змяніць блок, бо ў ім знаходзіцца кантрольная сума дадзеных блока. Праверка кантрольнай сумы пакажа, што дадзеныя былі змененыя.

Для вылічэння кантрольнай сумы можна выкарыстоўваць адну з функцый хэшавання, такую ​​як MD-5, SHA-1, SHA-256 і да т.п. Хэш-функцыі вылічаюць некаторае значэнне (напрыклад, у выглядзе тэкставага радка сталай даўжыні) у выніку выкананні незваротных аперацый над блокам дадзеных. Аперацыі залежаць ад выгляду хэш-функцыі.

Нават пры невялікай змене змесціва блока дадзеных значэнне хэш-функцыі таксама зменіцца. Аналізуючы значэнне хэш-функцыі, немагчыма аднавіць блок дадзеных, для якога яна была вылічана.

Ці будзе дастатковая такая абарона? На жаль няма.

У гэтай схеме кантрольная сума (хэш-функцыя) абараняе толькі асобныя блокі, але не ўвесь ланцужок блокаў. Ведаючы алгарытм вылічэння хэш-функцыі, зламыснік можа лёгка падмяніць змесціва блока. Таксама нішто не перашкодзіць яму выдаліць блокі з ланцужка ці дадаць новыя.

Каб абараніць увесь ланцужок у цэлым, можна захоўваць у кожным блоку разам з дадзенымі яшчэ і хэш дадзеных папярэдняга блока (мал. 1.3).

Кніга «Стварэнне смарт-кантрактаў Solidity для блокчейна Ethereum. Практычнае кіраўніцтва»
Мал. 1.3. Дадаем у блок дадзеных хэш папярэдняга блока

У гэтай схеме каб змяніць які-небудзь блок, трэба пералічыць хэш-функцыі ўсіх наступных блокаў. Здавалася б, у чым праблема?

У рэальных блокчейнах дадаткова створаны штучныя цяжкасці для дадання новых блокаў - выкарыстоўваюцца алгарытмы, якія патрабуюць шмат вылічальных рэсурсаў. З улікам таго, што для занясення змен у блок пералічыць трэба не адзін гэты блок, а ўсё наступныя, зрабіць гэта будзе вельмі складана.

Успомнім таксама, што дадзеныя блокчейна захоўваюцца (дублююцца) на шматлікіх вузлах сеткі, г.зн. выкарыстоўваецца дэцэнтралізаванае захоўванне. А гэта шматкроць ускладняе падробку блока, т.я. змены патрабуецца занесці на ўсе вузлы сеткі.

Бо блокі захоўваюць інфармацыю аб папярэднім блоку, то можна праверыць змесціва ўсіх блокаў ланцужка.

Блакчэйн Ethereum

Блокчейн Ethereum уяўляе сабой платформу, на базе якой можна ствараць размеркаваныя прыкладанні DApp. У адрозненне ад іншых платформаў, Ethereum дазваляе выкарыстоўваць так званыя разумныя кантракты (смарт-кантракты, smart contracts), напісаныя на мове праграмавання Solidity.

Гэтая платформа была створана ў 2013 годзе Віталікам Буцярыным, заснавальнікам часопіса Bitcoin Magazine, і запушчана ў 2015 годзе. Усё, што мы будзем вывучаць ці рабіць у нашым навучальным курсе, мае дачыненне менавіта да блокчейна Ethereum і смарт-кантрактам Solidity.

Майнінг ці як ствараюцца блокі

Майнінг (mining) уяўляе сабой даволі складаны і рэсурсаёмісты працэс дадання новых блокаў у ланцужок блокчейна, а зусім не «здабычу криптовалют». Майнінг забяспечвае працаздольнасць блокчейна, т.к. менавіта гэты працэс адказвае за даданне транзакцый у блокчейн Ethereum.

Людзі і арганізацыі, якія займаюцца даданнем блокаў, завуцца майнерамі (miner).
Праграмнае забеспячэнне (ПА), якое працуе на вузлах майнераў, спрабуе падабраць для апошняга блока параметр хэшавання з назовам Nonce, каб атрымалася вызначанае значэнне хэш-функцыі, зададзенай сеткай. Алгарытм хэшавання Ethash, які ўжываецца ў Ethereum, дазваляе атрымаць значэнне Nonce толькі шляхам паслядоўнага перабору.

Калі вузел майнера знайшоў правільнае значэнне Nonce, тое гэта з'яўляецца так званым доказам працы (PoW, Proof-of-work). У гэтым выпадку, калі блок будзе дададзены ў сетку Ethereum, майнер атрымлівае пэўную ўзнагароду ў валюце сеткі - Ether. На момант падрыхтоўкі нашай кнігі ўзнагароджанне складае 5 Ether, аднак з часам яно будзе паніжанае.

Такім чынам, майнеры Ethereum забяспечваюць працу сеткі, дадаючы блокі, і атрымліваюць за гэта криптовалютные грошы. У інтэрнэце вы знойдзеце масу інфармацыі аб майнерах і майнінгу, а мы засяродзімся на стварэнні кантрактаў Solidity і дэцэнтралізаваных прыкладанняў DApp у сетцы Ethereum.

вынікі ўрока

На першым уроку вы пазнаёміліся з блокчейном і пазналі, што ён уяўляе сабою адмысловай выявай складзеную паслядоўнасцю блокаў. Змесціва раней запісаных блокаў немагчыма змяніць, бо для гэтага давядзецца пералічыць усе наступныя блокі на многіх вузлах сеткі, на што трэба вельмі шмат рэсурсаў і часу.

Блокчейн можа прымяняцца для захавання вынікаў выканання транзакцый. Яго галоўнае прызначэнне - арганізацыя бяспечнага выканання транзакцый паміж бакамі (персонамі і арганізацыямі), паміж якімі няма даверу. Вы даведаліся, у якіх канкрэтна галінах бізнесу і ў якіх сферах можна выкарыстоўваць блокчейн Ethereum і смарт-кантракты Solidity. Гэта банкаўская сфера, рэгістрацыя правоў уласнасці, дакументаў і да т.п.

Вы таксама даведаліся, што пры выкарыстанні блокчейна могуць узнікаць розныя праблемы. Гэта праблемы верыфікацыі інфармацыі, якая дадаецца ў блокчейн, хуткасць працы блокчейна, кошт транзакцый, праблема абмену дадзенымі паміж смарт-кантрактамі і рэальным светам, а таксама патэнцыйна магчымыя напады зламыснікаў, накіраваныя на выкраданне криптовалютных сродкаў з акаўнтаў карыстачоў.

Таксама мы коратка распавялі аб майнінгу як аб працэсе дадання новых блокаў у блокчейн. Майнінг неабходны для выканання транзакцый. Тыя, хто займаецца майнінгам, забяспечваюць працаздольнасць блокчейна і атрымліваюць за гэтую ўзнагароду ў крыптавалюце.

Урок 2. Падрыхтоўка працоўнага асяроддзя ў АС Ubuntu і DebianВыбар аперацыйнай сістэмы
Ўстаноўка неабходных утыліт
Усталёўка Geth і Swarm у Ubuntu
Усталёўка Geth і Swarm у Debian
папярэдняя падрыхтоўка
Загрузка дыстрыбутыва Go
Ўстаноўка зменных асяроддзя
Праверка версіі Go
Ўстаноўка Geth і Swarm
Ствараем прыватны блокчэйн
Рыхтуем файл genesis.json
Ствараем каталог для працы
Ствараем акаўнт
Запускаем ініцыялізацыю вузла
Параметры запуску вузла
Падлучаемся да нашага вузла
Упраўленне майнінгам і праверка балансу
Завяршэнне працы кансолі Geth
вынікі ўрока

Урок 3. Падрыхтоўка працоўнага асяроддзя на Raspberry Pi 3Падрыхтоўка Raspberry Pi 3 да працы
Ўстаноўка Rasberian
Ўстаноўка абнаўленняў
Уключэнне доступу SSH
Ўстаноўка статычнага адрасу IP
Ўстаноўка неабходных утыліт
Ўстаноўка Go
Загрузка дыстрыбутыва Go
Ўстаноўка зменных асяроддзя
Праверка версіі Go
Ўстаноўка Geth і Swarm
Ствараем прыватны блокчэйн
Праверка ўліковага запісу і балансу
вынікі ўрока

Урок 4. Уліковыя запісы і перавод сродкаў паміж акаўнтаміПрагляд і даданне акаўнтаў
Прагляд спісу акаўнтаў
Даданне акаўнта
Параметры каманды geth account
Паролі акаўнтаў
Криптовалюта ў Ethereum
Грашовыя адзінкі Ethereum
Вызначаем бягучы баланс нашых акаўнтаў
Перавод сродкаў з аднаго акаўнта на іншы
Метад eth.sendTransaction
Прагляд стану транзакцыі
Квітанцыя транзакцыі
вынікі ўрока

Урок 5. Публікацыя першага кантрактаСмарт-кантракты ў Ethereum
Выкананне смарт-кантракта
Віртуальная машына Ethereum
Інтэграванае асяроддзе распрацоўкі Remix Solidity IDE
Запуск кампіляцыі
Выклік функцый кантракту
Публікацыя кантракта ў прыватнай сетцы
Атрымліваем вызначэнне ABI і двайковы код кантракта
Публікацыя кантракта
Праверка стану транзакцыі публікацыі кантракта
Выклік функцый кантракту
Пакетны кампілятар solc
Ўстаноўка solc у Ubuntu
Усталяванне solc у Debian
Кампіляцыя кантракта HelloSol
Публікацыя кантракта
Ўстаноўка solc на Rasberian
вынікі ўрока

Урок 6. Смарт-кантракты і Node.jsЎстаноўка Node.js
Ўстаноўка ў Ubuntu
Ўстаноўка ў Debian
Устаноўка і запуск Ganache-cli
Ўстаноўка Web3
Ўстаноўка solc
Ўстаноўка Node.js на Rasberian
Скрыпт для атрымання спісу акаўнтаў у кансолі
Скрыпт для публікацыі смарт-кантракта
Запуск і атрыманне параметраў
Атрыманне параметраў запуску
Кампіляцыя кантракта
Разблакіроўка акаўнта
Загрузка ABI і бінарнага кода кантракта
Ацэнка неабходнай колькасці газу
Стварэнне аб'екта і запуск публікацыі кантракта
Запуск скрыпту публікацыі кантракта
Выклік функцый смарт-кантракта
Ці магчыма абнаўленне апублікаванага смарт-кантракта
Праца з Web3 версіі 1.0.x
Атрымліваем спіс акаўнтаў
Публікацыя кантракта
Выклік функцый кантракту
Перавод сродкаў з аднаго акаўнта на іншы
Перавод сродкаў на акаўнт кантракта
Абнаўляем смарт-кантракт HelloSol
Ствараем скрыпт для прагляду балансу акаўнта
Дадаем выклік функцыі getBalance у скрыпт call_contract_get_promise.js
Папаўняем рахунак смарт-кантракту
вынікі ўрока

Урок 7. Уводзіны ў TruffleЎстаноўка Truffle
Ствараем праект HelloSol
Стварэнне каталога і файлаў праекта
Каталог contracts
Каталог migrations
Каталог test
Файл truffle-config.js
Кампіляцыя кантракта HelloSol
Запуск публікацыі кантракта
Выклік функцый кантракта HelloSol у запрашэнні Truffle
Выклік функцый кантракту HelloSol са скрыпту JavaScript пад кіраваннем Node.js
Устаноўка модуля truffle-contract
Выклік функцый кантракту getValue і getString
Выклік функцый кантракту setValue і setString
Змяненне кантракта і паўторная публікацыя
Праца з Web3 версіі 1.0.x
Уносім змены ў смарт-кантракт HelloSol
Скрыпты для выкліку метадаў кантракту
Тэставанне ў Truffle
Тэст на Solidity
Тэст на JavaScript
вынікі ўрока

Урок 8. Тыпы дадзеных SolidityКантракт для вывучэння тыпаў даных
Лагічныя тыпы дадзеных
Беззнакавыя цэлыя лікі і цэлыя лікі са знакам
Лікі з фіксаванай коскай
Адрас
Зменныя складаных тыпаў
Масівы фіксаванага памеру
Дынамічныя масівы
Пералік
Структуры
Слоўнікі mapping
вынікі ўрока

Урок 9. Міграцыя кантрактаў у прыватную сетку і ў сетку RinkebyПублікацыя кантракту з Truffle у прыватную сетку Geth
Падрыхтоўка вузла прыватнай сеткі
Падрыхтоўка кантракта для працы
Кампіляцыя і міграцыя кантракта ў сетку Truffle
Запуск міграцыі ў лакальную сетку geth
Здабываем артэфакты Truffle
Публікацыя кантракту з Truffle у тэставай сетцы Rinkeby
Падрыхтоўка вузла Geth для працы з Rinkeby
Сінхранізацыя вузла
Даданне акаўнтаў
Папаўненне акаўнта Rinkeby эфірам
Запуск міграцыі кантракта ў сетку Rinkeby
Прагляд інфармацыі аб кантракце ў сетцы Rinkeby
Кансоль Truffle для сеткі Rinkeby
Прасцейшы спосаб выкліку функцый кантракту
Выклік метадаў кантракта пры дапамозе Node.js
Перавод сродкаў паміж акаўнтамі ў кансолі Truffle для Rinkby
вынікі ўрока

Урок 10. Дэцэнтралізаванае сховішча дадзеных Ethereum SwarmЯк працуе Ethereum Swarm
Ўстаноўка і запуск Swarm
Аперацыі з файламі і каталогамі
Загрузка файла ў Ethereum Swarm
Чытанне файла з Ethereum Swarm
Прагляд маніфеста загружанага файла
Загрузка каталогаў з падкаталогамі
Чытанне файла з загружанага каталога
Выкарыстанне публічнага шлюза Swarm
Зварот да Swarm са скрыптоў Node.js
Модуль Perl Net::Ethereum::Swarm
Усталяванне модуля Net::Ethereum::Swarm
Запіс і чытанне дадзеных
вынікі ўрока

Урок 11. Фрэймворк Web3.py для працы з Ethereum на PythonЎстаноўка Web3.py
Абнаўленне і ўстаноўка неабходных пакетаў
Ўстаноўка модуля easysolc
Публікацыя кантракта з дапамогай Web3.py
Кампіляцыя кантракта
Падключэнне да правайдэра
Выкананне публікацыі кантракта
Захаванне адрасу кантракта і abi у файле
Запуск скрыпту публікацыі кантракта
Выклік метадаў кантракта
Чытанне адрасы і abi кантракта з файла JSON
Падключэнне да правайдэра
Стварэнне аб'екта кантракта
Выклік метадаў кантракта
Truffle і Web3.py
вынікі ўрока

Урок 12. АракулыЦі можа смарт-кантракт давяраць дадзеным са знешняга свету
Аракулы як інфармацыйныя пасярэднікі блокчейна
Крыніца дадзеных
Код для прадстаўлення дадзеных з крыніцы
Аракул для запісу абменнага курсу ў блокчэйн
Кантракт USDRateOracle
Абнаўленне абменнага курса ў смарт-кантракце
Выкарыстанне правайдэра Web Socket
Чаканне падзеі RateUpdate
Апрацоўка падзеі RateUpdate
Ініцыяванне абнаўлення дадзеных у смарт-кантракце
вынікі ўрока

Крыніца: habr.com

Дадаць каментар