{"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\/et\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","title":{"rendered":"Raamat \u201eSolidity nutilepingute loomine Ethereum plokiahelas. Praktikajuhend\u201c","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Raamat \u201eSolidity nutilepingute loomine Ethereum plokiahelas. Praktikajuhend\u201c\" src=\"\/wp-content\/uploads\/2019\/10\/9549e708e99fef6892045ff854231fa7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nRohkem kui aasta t\u00f6\u00f6tasin raamatu \u201eSolidity nutilepingute loomine Ethereum blockchainis. Praktiline juhend\u201d kallal, ja n\u00fc\u00fcd on see t\u00f6\u00f6 l\u00f5petatud ning raamat <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">on v\u00e4lja antud ja saadaval Litresis<\/a><\/noindex>.<\/p>\n<p>Loodan, et minu raamat aitab kiiresti alustada Solidity nutilepingute ja jaotatud rakenduste DApp loomisega Ethereum blockchainis. See koosneb 12st \u00f5lessonast praktiliste \u00fclesannetega. Nende t\u00e4itmise kaudu suudab lugeja luua oma kohalikud Ethereum s\u00f5lmed, avaldada nutilepingud ja kutsuda \u00fcles nende meetodeid, vahetada andmeid reaalse maailma ja nutilepingute vahel oraklite abil, t\u00f6\u00f6tada Rinkeby testimisv\u00f5rguga. <\/p>\n<p>Raamat on suunatud k\u00f5igile, kes on huvitatud kaasaegsetest tehnoloogiatest blockchainide valdkonnas ja soovivad kiiresti omandada teadmisi, mis v\u00f5imaldavad tegeleda huvitava ja perspektiivika t\u00f6\u00f6ga.<\/p>\n<p>Allpool leiate raamatu sisukorra ja esimese peat\u00fcki (ka Litresis <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">saadaval raamatu l\u00f5ike). Loodan saada tagasisidet, m\u00e4rkusi ja ettepanekuid. K\u00f5ike seda p\u00fc\u00fcan arvesse v\u00f5tta raamatu j\u00e4rgmise v\u00e4ljaande ettevalmistamisel.<\/a><\/noindex> Meie raamat on m\u00f5eldud neile, kes soovivad mitte ainult m\u00f5ista Ethereum blockchaini t\u00f6\u00f6p\u00f5him\u00f5tteid, vaid ka omandada praktilisi oskusi jaotatud rakenduste DApp loomisel Solidity programmeerimiskeeles selle v\u00f5rgu jaoks.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Sisukord<\/b><b class=\"spoiler_title\">Sissejuhatus<\/b>Seda raamatut on parem mitte lihtsalt lugeda, vaid t\u00f6\u00f6tada sellega, t\u00e4ites \u00f5ppetundides kirjeldatud praktilisi \u00fclesandeid. T\u00f6\u00f6ks on vajalik kohalik arvuti, virtuaalne v\u00f5i pilveserver, millel on installitud Debian v\u00f5i Ubuntu operatsioonis\u00fcsteem. Samuti saab paljusid \u00fclesandeid t\u00e4ita Raspberry Pi abil.<\/p>\n<p>Esimeses \u00f5ppetunnis<\/p>\n<p><b>vaatame Ethereum blockchaini t\u00f6\u00f6p\u00f5him\u00f5tteid ja peamist terminoloogiat, samuti r\u00e4\u00e4gime sellest, kus seda blockchaini kasutada. <\/b>Teise \u00f5ppetunni <\/p>\n<p>Eesm\u00e4rk <b>eesm\u00e4rk on luua privaatne Ethereum blockchaini s\u00f5lm kursuse raames edasiseks t\u00f6\u00f6ks Ubuntu ja Debian serveris. Vaatame p\u00f5hivahendite, nagu geth, mis tagab meie blockchaini s\u00f5lme t\u00f6\u00f6, paigaldamise erip\u00e4ra, samuti detsentraliseeritud andmehoidla swarm deemonit.<\/b> Kolmas \u00f5ppetund<\/p>\n<p><b>\u0422\u0440\u0435\u0442\u0438\u0439 \u0443\u0440\u043e\u043a<\/b> \u00f5petab teid eksperimenteerima Ethereumiga odaval mikrokontrolleril Raspberry Pi. Te installite Raspberry Pi-le operatsioonis\u00fcsteemi (OS) Rasberian, Gethi utiliidi, mis v\u00f5imaldab blokeeringu s\u00f5lme t\u00f6\u00f6tamist, samuti hajutatud andmehoidla Swarmi demot.<\/p>\n<p><b>Neljas \u00f5ppetund<\/b> on p\u00fchendatud kontodele ja kr\u00fcptovaluutadele Ethereumis ning meetoditele, kuidas kanda vahendeid \u00fchelt kontolt teisele Gethi konsoolis. \u00d5pite looma kontosid, algatama rahakandu tehinguid, saama tehingu staatust ja selle kviitungeid.<\/p>\n<p><b>Viiendas \u00f5ppetunnis<\/b> tutvute nutilepingutega Ethereumis ja saate teada, kuidas need t\u00e4idetakse Ethereum virtuaalmasina poolt. <\/p>\n<p>Loote ja avaldate oma esimese nutilepingu privaatv\u00f5rgus Ethereumis ning \u00f5pite kutsuma v\u00e4lja selle funktsioone. Selleks kasutate Remix Solidity IDE arenduskeskkonda. Lisaks \u00f5pite installima ja kasutama pakendi kompilaatorit solc.<br \/>\nSamuti r\u00e4\u00e4gime nii nimetatud rakenduse binaarsest liidesest (Application Binary Interface, ABI) ja \u00f5pime, kuidas seda kasutada.<\/p>\n<p><b>Kuues \u00f5ppetund<\/b> on p\u00fchendatud JavaScripti skriptide loomisele, mis t\u00f6\u00f6tavad Node.js all ja t\u00e4idavad operatsioone Solidity nutilepingutega.<\/p>\n<p>Te installite Node.js OS-is Ubuntu, Debian ja Rasberian, kirjutate skripte, et avaldada nutileping kohalikes Ethereum v\u00f5rgus ja kutsuda v\u00e4lja selle funktsioone. <\/p>\n<p>Lisaks \u00f5pite, kuidas skriptide abil kanda vahendeid tavakontode vahel ning arvestada need nutilepingute kontodele.<\/p>\n<p><b>Seitsmendas \u00f5ppetunnis<\/b> \u00f5pite installima ja kasutama populaarset arendajate seas Solidity nutilepingute integreeritud keskkonda Truffle. \u00d5pite looma JavaScripti skripte, mis kutsuvad lepingute funktsioone v\u00e4lja truffle-contract mooduli abil, samuti testite oma nutilepingut Truffle vahenditega.<\/p>\n<p><b>Kaheksas \u00f5ppetund<\/b> on p\u00fchendatud Solidity andmet\u00fc\u00fcpidele. Kirjutate nutilepingud, mis t\u00f6\u00f6tavad selliste andmet\u00fc\u00fcpidega nagu alla- ja \u00fcle\u00fclevaate t\u00e4isarvud, allkirjaga numbrid, stringid, aadressid, keeruliste t\u00fc\u00fcpide muutujad, massiivid, loendid, struktuurid ja s\u00f5nastikud.<\/p>\n<p><b>\u00dcheksandas \u00f5ppetunnis<\/b> Te l\u00e4hendate ennast veel \u00fche sammu v\u00f5rra nutilepingute loomiseks Ethereum p\u00f5hiv\u00f5rgus. \u00d5pite avaldama lepinguid Truffle'i abil Gethi privaatses v\u00f5rgus ja Rinkeby testv\u00f5rgus. Nutilepingu silumine Rinkeby v\u00f5rgus on v\u00e4ga kasulik enne selle avaldamist p\u00f5hiv\u00f5rgus - seal on k\u00f5ik peaaegu p\u00e4ris, kuid tasuta.<\/p>\n<p>Kursuse k\u00e4igus loote Rinkeby testv\u00f5rgu s\u00f5lme, t\u00e4idate seda vahenditega ja avaldate nutilepingut.<\/p>\n<p><b>Tund 10<\/b> on p\u00fchendatud jaotatud andmesalvestustele Ethereum Swarm. Jaotatud salvestuste kasutamine aitab teil v\u00e4hendada suuri andmemahukust Ethereum plokkides. <\/p>\n<p>Selles tunnis loote kohaliku Swarm salvestuse, viite l\u00e4bi failide ja kaustade kirjutamise ja lugemise operatsioone. Edasi \u00f5pite t\u00f6\u00f6tama Swarm'i avaliku v\u00e4rava kaudu, kirjutate skripte Swarm'ile p\u00f6\u00f6rdumiseks Node.js kaudu ning kasutate Perl moodulit Net::Ethereum::Swarm.<\/p>\n<p><b>Tunni 11 eesm\u00e4rk<\/b> on omandada oskused nutilepingute Solidity kasutamiseks populaarse programmeerimiskeele Python ja Web3.py raamistikuga. Paigaldada selle raamistik, kirjutada skripte nutilepingute kompileerimiseks ja avaldamiseks ning nende funktsioonide kutsumiseks. Web3.py-d kasutatakse nii iseseisvalt kui ka koos integreeritud arenduskeskkonnaga Truffle.<\/p>\n<p><b>Tunnis 12<\/b> \u00f5pite edastama andmeid nutilepingute ja reaalse maailma vahel orakulite abil. See on vajalik andmete saamiseks veebisaitidelt, asjade interneti (IoT) seadmetelt, erinevatelt instrumentidelt ja sensoritelt ning andmete saatmiseks nutilepingutest nendele seadmetele. Tunni praktilises osas loote orakli ja nutilepingu, mis saab teavet USD ja rubla vahetuskurssidest Venemaa Keskpanga veebisaidi kaudu.<\/p>\n<p><b class=\"spoiler_title\">Tund 1. L\u00fchidalt plokiahelast ja Ethereum v\u00f5rgust<\/b><b>\u00d5ppe eesm\u00e4rk:<\/b> tutvuda Ethereum plokiahela t\u00f6\u00f6p\u00f5him\u00f5tetega, selle rakendusaladega ja p\u00f5hiterminoloogiaga.<br \/>\n<b>Praktilised \u00fclesanded:<\/b> selles tunnis ei ole ette n\u00e4htud.<\/p>\n<p>T\u00e4na on raske leida tarkvaraarendajat (SO), kes poleks kuulnud plokiahela (Blockchain) tehnoloogiast, kr\u00fcptovaluutadest (Cryptocurrency v\u00f5i Crypto Currency), bitcoine (Bitcoin), esmane m\u00fc\u00fck (ICO, Initial Coin Offering), nutilepingutest (Smart Contract) ning muudest m\u00f5istetest ja terminoloogiast, mis on seotud plokiahelaga.<\/p>\n<p>Plokiahela tehnoloogia avab uusi turge ja loob t\u00f6\u00f6kohti programmeerijatele. Kui omandate k\u00f5ik kr\u00fcptovaluutatehnoloogiate ja nutilepingute tehnoloogiate n\u00fcansid, ei tohiks teil nende teadmiste praktikas rakendamisel probleeme olla.<\/p>\n<p>Tuleb \u00f6elda, et kr\u00fcptovaluutade ja plokiahelate \u00fcmber on palju spekulatsioone. J\u00e4tame k\u00f5rvale arutlused kr\u00fcptovaluutade kursimuutuste, piramidide loomise ja kr\u00fcptovaluutade seadusandlikkuse n\u00fcansside \u00fcle. Meie \u00f5pikursusel keskendume peamiselt Ethereum'i (eth, eeter) plokiahela nutilepingute tehnilise rakendamise aspektidele ja nn detsentraliseeritud rakenduste (Distributed Application, DApp) arendamisele.<\/p>\n<h3>Mis on plokiahel<\/h3>\n<p>\nPlokiahel (Blockchain, Block Chain) on andmeplokkide ahel, mis on omavahel teatud viisil seotud. Ahela alguses asub esimene plokk, mida nimetatakse algplokiks (genesis block) v\u00f5i geneesi plokiks. Selle j\u00e4rel j\u00e4rgneb teine, siis kolmas ja nii edasi.<\/p>\n<p>K\u00f5ik need andmeplokid replitseeritakse automaatselt paljudes plokiahela v\u00f5rgu s\u00f5lmedes. Nii tagatakse plokiahela andmete detsentraliseeritud ladustamine. <br \/>\nSaate ette kujutada plokiahela s\u00fcsteemi kui suurt hulka s\u00f5lmi (f\u00fc\u00fcsilisi v\u00f5i virtuaalseid servereid), mis on \u00fchendatud v\u00f5rku ja replitseerivad k\u00f5ik muudatused andmeplokkide ahelas. See on nagu hiiglaslik mitme serveriga arvuti, kus sellise arvuti s\u00f5lmed (serverid) v\u00f5ivad olla \u00fcle kogu maailma. Ka teie v\u00f5ite lisada oma arvuti plokiahela v\u00f5rku. <\/p>\n<h4>Detsentraliseeritud andmebaas<\/h4>\n<p>\nPlokiahelat v\u00f5ib ette kujutada kui detsentraliseeritud andmebaasi, mis replitseeritakse k\u00f5igisse plokiahela v\u00f5rgu s\u00f5lmedesse. Teoorias t\u00f6\u00f6tab plokiahel seni, kuni \u00fckski s\u00f5lm, mis salvestab k\u00f5ik plokiahela plokid, t\u00f6\u00f6tab.<\/p>\n<h4>Detsentraliseeritud andmeregister<\/h4>\n<p>\nPlokiahelat v\u00f5ib pidada ka detsentraliseeritud andmeregistriks ja tehingute (transaktsioonide) registriks. Sellise registri teine nimetus on raamatupidamine. <\/p>\n<p>Jaotatud registrisse saab andmeid lisada, kuid neid ei saa muuta ega kustutada. Selline v\u00f5imalus puudub, muu hulgas, t\u00e4nu kr\u00fcptograafiliste algoritmide, spetsiaalsete plokkide lisamise algoritmide ja detsentraliseeritud andmete salvestamise kasutamisele.<\/p>\n<p>Plokkide lisamise ja toimingute (tehingute) t\u00e4itmise ajal kasutatakse privaatv\u00f5tmeid ja avalikke v\u00f5tmeid. Need piiravad plokiahela kasutajaid, andes neile juurdep\u00e4\u00e4su ainult oma andmeplokkidele.<\/p>\n<h4>Tehingud<\/h4>\n<p>\nPlokiahel salvestab teavet toimingute (tehingute) kohta plokkides. Samal ajal ei saa vanu, juba tehtud tehinguid tagasi p\u00f6\u00f6rata ega muuta. Uued tehingud salvestatakse uusi, lisatud plokkidesse.<\/p>\n<p>Seega saab plokiahelas salvestada muutumatul kujul kogu tehingute ajaloo. Seet\u00f5ttu saab plokiahelat kasutada n\u00e4iteks usaldusv\u00e4\u00e4rseks pangatehingute, autori\u00f5iguse andmete ja kinnisvaraarenduse omanike ajaloo salvestamiseks jne.<\/p>\n<p>Ethereum'i plokiahel sisaldab nn s\u00fcsteemi olekuid. Tehingute toimumisel muutub olek algsest praeguseks. Tehingud salvestatakse plokkidesse.<\/p>\n<h4>Avalikud ja privaatseid plokiahelad<\/h4>\n<p>\nSiin tuleb m\u00e4rkida, et k\u00f5ik eelnev kehtib ainult nn avalike plokiahelate jaoks, mida ei saa kontrollida \u00fcksikute f\u00fc\u00fcsiliste v\u00f5i juriidiliste isikute, riigiasutuste ega valitsuste poolt. <br \/>\nNii \u00f6eldud privaatsetes plokiahelates on nende loojate t\u00e4ielik kontroll, ja seal on v\u00f5imalik k\u00f5ik, n\u00e4iteks kogu plokkide ahela t\u00e4ielik asendamine.<\/p>\n<h4>Praktilised rakendused plokiahela jaoks<\/h4>\n<p>\nKuidas v\u00f5ib plokiahel olla kasulik?<\/p>\n<p>L\u00fchidalt, plokiahel v\u00f5imaldab turvaliselt teostada tehinguid (kokkuleppeid) osapoolte vahel, kes ei usalda \u00fcksteist. Plokiahelasse salvestatud andmeid (tehingud, isikuandmed, dokumendid, t\u00f5endid, lepingud, saated jne) ei saa salvestamise j\u00e4rel v\u00f5ltsida ega asendada. Seet\u00f5ttu saab plokiahela p\u00f5hjal luua n\u00e4iteks usaldusv\u00e4\u00e4rseid jagatud registrit igasuguste dokumentide jaoks.<\/p>\n<p>Loomulikult teate, et plokiahelate baasil luuakse kr\u00fcptovaluutas\u00fcsteeme, mille eesm\u00e4rk on asendada tavalised paberrahad. Paberrahad on tuntud ka kui fiat-raha (Fiat Money).<br \/>\nPlokiahel tagab tehingute salvestamise ja muutumatuse, mis on kinnitatud blokkides, mist\u00f5ttu saab seda kasutada kr\u00fcptovaluutas\u00fcsteemide loomiseks. See sisaldab kogu ajalugu kr\u00fcptoressursside edastamisest erinevate kasutajate (kontode) vahel, samas on iga tehing j\u00e4lgitav.<\/p>\n<p>Kuigi kr\u00fcptovaluutas\u00fcsteemide sees v\u00f5ivad tehingud olla anon\u00fc\u00fcmsed, toob kr\u00fcptovaluuta v\u00e4ljav\u00f5tmine ja selle vahetamine fiat-raha tavaliselt kaasa kr\u00fcptovaluuta aktiivide omaniku isiku avalikuks tuleku. <\/p>\n<p>Nii-\u00f6elda nutilepingud, mis on Ethereumis t\u00f6\u00f6tav tarkvara, v\u00f5imaldavad automatiseerida tehingute s\u00f5lmimise protsessi ja nende t\u00e4itmise kontrolli. See on eriti t\u00f5hus, kui tehingu eest makstakse kr\u00fcptovaluuta Ether (eeter) abil.<\/p>\n<p>Ethereum plokiahel ja Ethereumis nutilepingud, mis on kirjutatud programmeerimiskeeles Solidity, v\u00f5ivad leida kasutust n\u00e4iteks j\u00e4rgmistes valdkondades:<\/p>\n<ul>\n<li>alternatiiv notariseeritud dokumentide jaoks;<\/li>\n<li>kinnisvaraobjektide registri ja tehingute andmete hoidmine;<\/li>\n<li>intellektuaalomandi \u00f5iguste (raamatud, pildid, muusikateosed jne) andmete s\u00e4ilitamine;<\/li>\n<li>isevalitsemise s\u00fcsteemide loomine;<\/li>\n<li>rahandus ja pangandustegevus;<\/li>\n<li>logistika rahvusvahelises mastaabis, kaubavoogude j\u00e4lgimine;<\/li>\n<li>isikuandmete hoidmine isikutunnistuste s\u00fcsteemi analoogina;<\/li>\n<li>turvalised tehingud \u00e4ritegevuses;<\/li>\n<li>meditsiiniliste uuringute tulemuste ning m\u00e4\u00e4ratud protseduuride ajaloo hoidmine.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Plokiahela probleemid<\/h4>\n<p>\nKuid loomulikult pole k\u00f5ik nii lihtne, nagu v\u00f5iks arvata! <\/p>\n<p>On probleeme andmete valideerimisega enne nende lisamist plokiahelasse (n\u00e4iteks kas need on ehtsad?), samal ajal on probleeme s\u00fcsteemi- ja rakendustarkvara turvalisusega, millega t\u00f6\u00f6tatakse plokiahela alusel, samuti probleemid seoses sotsiaalse inseneritehnika meetodite kasutamisega kr\u00fcptovaluutakottide juurdep\u00e4\u00e4su varguseks jne.<\/p>\n<p>Kui r\u00e4\u00e4kida privaatsetest plokiahelatest, mis kuuluvad isikule v\u00f5i organisatsioonile, siis usaldusv\u00e4\u00e4rsuse tase ei \u00fcleta usaldusv\u00e4\u00e4rsuse taset sellele isikule v\u00f5i organisatsioonile endale.<\/p>\n<p>Samuti tuleb arvestada, et plokiahelas salvestatud andmed on k\u00f5igile k\u00e4ttesaadavad. Seega ei sobi plokiahel (eriti avalik) konfidentsiaalse teabe s\u00e4ilitamiseks. Kuid t\u00f5siasi, et plokiahela teavet ei saa muuta, v\u00f5ib aidata ennetada v\u00f5i uurida eri t\u00fc\u00fcpi pettusi.<\/p>\n<p>Ethereum'i detsentraliseeritud rakendused on mugavad, kui nende kasutamise eest makstakse kr\u00fcptorahaga. Mida rohkem inimesi omab kr\u00fcptoraha v\u00f5i on valmis seda ostma, seda populaarsemaks muutuvad DApp rakendused ja nutilepingud.<\/p>\n<p>Plokiahela \u00fcldiste probleemide hulgas, mis takistavad selle praktilist rakendamist, v\u00f5ib mainida uute plokkide lisamise piiratud kiirus ja suhteliselt k\u00f5rged tehingutasud. Kuid selles valdkonnas arendatakse tehnoloogiat aktiivselt ja on lootust, et tehnilised probleemid lahenevad ajaga.<\/p>\n<p>Teine probleem seisneb selles, et Ethereum'i plokiahela nutilepingud t\u00f6\u00f6tavad virtuaalmasinate isoleeritud keskkonnas ning neil ei ole juurdep\u00e4\u00e4su reaalse maailma andmetele. Eelk\u00f5ige ei saa nutilepingu programm lugeda andmeid veebilehtedelt ega mistahes f\u00fc\u00fcsilistelt seadmetelt (sensorid, kontaktid jne) ning ei saa edastada andmeid v\u00e4listele seadmetele. Seda probleemi ja v\u00f5imalikke lahendusi arutame tunnis, mis on p\u00fchendatud nn Oraaklitele - nutilepingute teabevahendajatele.<\/p>\n<p>Samuti on \u00f5igusaktides piiratust. M\u00f5nes riigis, n\u00e4iteks, on keelatud kasutada kr\u00fcptorahaga maksmist, kuid selle omamine on lubatud kui digitaalset varat\u00fc\u00fcpi, sarnaselt v\u00e4\u00e4rtpaberitega. Selliseid varasid saab osta ja m\u00fc\u00fca b\u00f6rsil. Igal juhul tuleb kr\u00fcptorahadega t\u00f6\u00f6tavate projektide loomisel tutvuda selle riigi seadustega, mille jurisdiktsiooni alla teie projekt kuulub.<\/p>\n<h3>Kuidas plokiahela ahel koostatakse<\/h3>\n<p>\nNagu juba mainitud, on plokiahel lihtne andmeplokkide ahel. Esmalt moodustatakse selle ahela esimene plokk, seej\u00e4rel lisatakse sellele teine ja nii edasi. Eeldatakse, et tehingute andmed salvestatakse plokkidesse ja lisatakse k\u00f5ige viimasesse plokki.<\/p>\n<p>Joonisel 1.1 oleme n\u00e4idanud lihtsaimat plokkide j\u00e4rjestuse varianti, kus esimene plokk viitab j\u00e4rgmisele. <\/p>\n<p><img decoding=\"async\" alt=\"Raamat \u201eSolidity nutilepingute loomine Ethereum plokiahelas. Praktikajuhend\u201c\" src=\"\/wp-content\/uploads\/2019\/10\/23ca04ba2c8914334032523d01bf8b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Joonis 1.1. Lihtne plokkide j\u00e4rjestus<\/i><\/p>\n<p>Sellisel juhul on aga v\u00e4ga lihtne \u00fcksk\u00f5ik millise ahela ploki sisu v\u00f5ltsida, kuna plokid ei sisalda mingit teavet muudatuste kaitsmiseks. Arvestades, et plokiahel on m\u00f5eldud inimestele ja ettev\u00f5tetele, kelle vahel pole usaldust, v\u00f5ib j\u00e4reldada, et selline andmete salvestamise viis plokiahela jaoks ei sobi.<\/p>\n<p>Hakkame plokke v\u00f5ltsimise eest kaitsma. Esimeses etapis proovime kaitsta iga ploki kontrollsummaga (joonis 1.2).<\/p>\n<p><img decoding=\"async\" alt=\"Raamat \u201eSolidity nutilepingute loomine Ethereum plokiahelas. Praktikajuhend\u201c\" src=\"\/wp-content\/uploads\/2019\/10\/141502accec14e868a9382c612cfc791.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Joonis 1.2. Lisame plokkide andmete kaitseks kontrollsummat<\/i><\/p>\n<p>N\u00fc\u00fcd ei saa r\u00fcndaja lihtsalt plokki muuta, kuna see sisaldab ploki andmete kontrollsummat. Kontrollsummade kontrollimine n\u00e4itab, et andmed on muutunud.<\/p>\n<p>Kontrollsummade arvutamiseks v\u00f5ib kasutada \u00fchte hash-funktsiooni, n\u00e4iteks MD-5, SHA-1, SHA-256 jne. Hash-funktsioonid arvutavad mingi v\u00e4\u00e4rtuse (nt konstantse pikkusega tekstirea) ploki andmete \u00fcle p\u00f6\u00f6rdumatute operatsioonide l\u00e4biviimise tulemusena. Operatsioonid s\u00f5ltuvad hash-funktsiooni t\u00fc\u00fcbist. <\/p>\n<p>Isegi ploki andmete sisu v\u00e4ikse muutuse korral muutub ka hash-funktsiooni v\u00e4\u00e4rtus. Anal\u00fc\u00fcsides hash-funktsiooni v\u00e4\u00e4rtust, ei ole v\u00f5imalik taastada ploki andmeid, mille jaoks see arvutati.<\/p>\n<p>Kas selline kaitse oleks piisav? Kahjuks mitte.<\/p>\n<p>Selles skeemis kaitseb kontrollsumma (hash-funktsioon) ainult \u00fcksikuid plokke, kuid mitte kogu plokkide ahelat. Teades hash-funktsiooni arvutamise algoritmi, saab r\u00fcndaja kergesti muuta ploki sisu. Samuti ei takista miski tal plokkide ahelast eemaldamist v\u00f5i uute lisamist.<\/p>\n<p>Kogu ahela kaitsmiseks tervikuna v\u00f5ib iga plokis koos andmetega salvestada ka eelmise ploki hash'i (joonis 1.3).<\/p>\n<p><img decoding=\"async\" alt=\"Raamat \u201eSolidity nutilepingute loomine Ethereum plokiahelas. Praktikajuhend\u201c\" src=\"\/wp-content\/uploads\/2019\/10\/f414ab67dbabc763c537a430e01ed065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Joonis 1.3. Lisame ploki andmetesse eelmise ploki hash'i<\/i><\/p>\n<p>Selles skeemis, et muuta m\u00f5nda plokki, tuleb \u00fcmber arvutada k\u00f5ikide j\u00e4rgnevaid plokkide hash-funktsioonid. Tundub ju, et mis siin siis probleemi on?<\/p>\n<p>Reaalsetes plokiahelates on lisaks loodud kunstlikud raskused uute plokkide lisamiseks \u2014 kasutatakse algoritme, mis n\u00f5uavad palju arvutusressursse. Arvestades, et ploki muutmiseks tuleb \u00fcmber arvutada mitte ainult see plokk, vaid k\u00f5ik j\u00e4rgnevad, on selle tegemine \u00e4\u00e4rmiselt keeruline.<\/p>\n<p>Peame meeles, et plokiahela andmed salvestatakse (duplitakse) arvukatel v\u00f5rgus\u00f5lmedel, st kasutatakse detsentraliseeritud salvestamist. See muudab ploki valeandmise oluliselt keerulisemaks, kuna muudatused tuleb teha k\u00f5igis v\u00f5rgus\u00f5lmedes.<\/p>\n<p>Kuna plokid sisaldavad teavet eelmise ploki kohta, on v\u00f5imalik kontrollida k\u00f5igi plokkide ketti sisu.<\/p>\n<h3>Ethereum plokiahel<\/h3>\n<p>\nEthereum plokiahel on platvorm, millel saab luua jagatud rakendusi DApp. Erinevalt teistest platvormidest v\u00f5imaldab Ethereum kasutada nn nutikaid lepinguid (smart contracts), mis on kirjutatud programmeerimiskeeles Solidity.<\/p>\n<p>See platvorm loodi 2013. aastal Vitalik Buterini poolt, kes on Bitcoin Magazine asutaja, ja k\u00e4ivitati 2015. aastal. K\u00f5ik, mida me meie \u00f5pikursusel uurime v\u00f5i teeme, on seotud just Ethereum plokiahela ja Solidity nutikate lepingutega.<\/p>\n<h3>Kaevandamine ehk kuidas plokid tekivad<\/h3>\n<p>\nKaevandamine (mining) on \u00fcsna keeruline ja ressursimahukas protsess, millega lisatakse uusi plokke plokiahela ketti, mitte ei \u201ekaevandata kr\u00fcptorahasid\u201c. Kaevandamine tagab plokiahela toimimise, kuna just see protsess vastutab tehingute lisamise eest Ethereum plokiahelasse.<\/p>\n<p>Inimesi ja organisatsioone, kes lisavad plokke, nimetatakse kaevandajateks (miners).<br \/>\nKaevandajate s\u00f5lmedes t\u00f6\u00f6tav tarkvara (SO) p\u00fc\u00fcab v\u00e4lja m\u00f5elda viimase ploki jaoks hash-kandjat nimega Nonce, et saada teatud v\u00e4\u00e4rtus hash-funktsioonist, mis on m\u00e4\u00e4ratud v\u00f5rgus. Ethashi hash-algoritm, mida Ethereumis kasutatakse, v\u00f5imaldab saada Nonce'i v\u00e4\u00e4rtuse ainult j\u00e4rjestikuste katsete kaudu. <\/p>\n<p>Kui kaevuri s\u00f5lm on leidnud \u00f5ige Nonce'i v\u00e4\u00e4rtuse, on see nn t\u00f6\u00f6 t\u00f5end (PoW, Proof-of-Work). Sel juhul, kui blokk lisatakse Ethereum'i v\u00f5rku, saab kaevur teatud tasu v\u00f5rgu valuutas \u2014 Eetris. Meie raamatu koostamise ajal on tasu 5 Eetrit, kuid aja jooksul see v\u00e4heneb.<\/p>\n<p>Nii et Ethereum'i kaevurid tagavad v\u00f5rgut\u00f6\u00f6d, lisades bloke ja saavad selle eest kr\u00fcptorahaga tasu. Internetist leiate hulgaliselt teavet kaevurite ja kaevandamise kohta, kuid meie keskendume Solidity lepingute loomisele ja detsentraliseeritud rakendustele DApp Ethereum'i v\u00f5rgus.<\/p>\n<h3>Tunni kokkuv\u00f5te<\/h3>\n<p>\nEsimesel tunnil tutvusite plokiahelaga ja \u00f5ppisite, et see on erilise viisil koostatud plokkide j\u00e4rjestus. Varem salvestatud plokkide sisu ei saa muuta, kuna selleks tuleb \u00fcmber arvutada k\u00f5ik j\u00e4rgnevad plokid paljude v\u00f5rgu s\u00f5lmede t\u00f5ttu, mida on vaja suure hulga ressursside ja ajaga.<\/p>\n<p>Plokiahelat saab kasutada tehingute teostamise tulemuste salvestamiseks. Selle peamine eesm\u00e4rk on turvaliste tehingute korraldamine isikute (inimeste ja organisatsioonide) vahel, kelle vahel ei ole usaldust. Te \u00f5ppisite, millisel konkreetsel \u00e4ri valdkonnas ja millistes sf\u00e4\u00e4rides saab kasutada Ethereum'i plokiahelat ja Solidity nutikaid lepinguid. Need on pangandussektor, omandi\u00f5iguse registrimine, dokumentide jne.<\/p>\n<p>Te \u00f5ppisite ka, et plokiahela kasutamisel v\u00f5ivad tekkida mitmesugused probleemid. Need on teabe verifitseerimise probleemid, mis lisatakse plokiahelasse, plokiahela t\u00f6\u00f6 kiirus, tehingute maksumus, andmevahetuse probleemid nutikad lepingute ja reaalse maailma vahel, samuti potentsiaalsed r\u00fcnnakud kurjategijate poolt, mille eesm\u00e4rk on varastada kr\u00fcptovaluutat kasutajate kontodelt.<\/p>\n<p>Lisaks r\u00e4\u00e4kisime l\u00fchidalt kaevandamisest kui protsessist, millega lisatakse uusi plokke plokiahelale. Kaevandamine on vajalik tehingute teostamiseks. Need, kes tegelevad kaevandamisega, tagavad plokiahela toimimise ja saavad selle eest kr\u00fcptorahaga tasu.<\/p>\n<p><b class=\"spoiler_title\">Tund 2. T\u00f6\u00f6 keskkonna ettevalmistamine OS Ubuntu ja Debianis<\/b>Operatsioonis\u00fcsteemi valik<br \/>\nVajalikud utiliidid<br \/>\nGethi ja Swarmi installimine Ubuntu's<br \/>\nGethi ja Swarmi installimine Debianis<br \/>\nEeltingimused<br \/>\nLaadimist Go distributiivist<br \/>\nKeskkonnamuutujate seadistamine<br \/>\nGo versiooni kontrollimine<br \/>\nGeth ja Swarm installimine<br \/>\nLoome privaatse plokiahela<br \/>\n\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0430\u0439\u043b genesis.json<br \/>\nLoome t\u00f6\u00f6kausta<br \/>\nLoome konto<br \/>\nAlustame s\u00f5lmimise initsialiseerimist<br \/>\nS\u00f5lme k\u00e4ivitamise parameetrid<br \/>\n\u00dchendume meie s\u00f5lmiga<br \/>\nKaevandamise haldamine ja saldo kontrollimine<br \/>\nGethi kylgkonna sulgemine<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">\u00d5ppetund 3. T\u00f6\u00f6 keskkonna seadistamine Raspberry Pi 3-l<\/b>Raspberry Pi 3 ettevalmistamine t\u00f6\u00f6ks<br \/>\nRasberian'i installimine<br \/>\nUuenduste installimine<br \/>\nSSH juurdep\u00e4\u00e4su lubamine<br \/>\nStaatilise IP aadressi seadistamine<br \/>\nVajalikud utiliidid<br \/>\nGo paigaldamine<br \/>\nLaadimist Go distributiivist<br \/>\nKeskkonnamuutujate seadistamine<br \/>\nGo versiooni kontrollimine<br \/>\nGeth ja Swarm installimine<br \/>\nLoome privaatse plokiahela<br \/>\nKonto ja saldo kontrollimine<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">\u00d5ppetund 4. Kontod ja vahendite \u00fclev\u00f5tmine kontode vahel<\/b>Kontode vaatamine ja lisamine<br \/>\nKontode nimekirja vaatamine<br \/>\nKonto lisamine<br \/>\nGethi konto k\u00e4skude parameetrid<br \/>\nKonto paroolid<br \/>\nKr\u00fcptoraha Ethereumis<br \/>\nEthereum rahalised \u00fchikud<br \/>\nM\u00e4\u00e4rame meie kontode hetkesaldo<br \/>\nVahendite \u00fclev\u00f5tmine \u00fchelt kontolt teisele<br \/>\nMethod eth.sendTransaction<br \/>\nTehingu oleku vaatamine<br \/>\nTehingu kuitants<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">\u00d5ppetund 5. Esimese lepingu avaldamine<\/b>Nutilepingud Ethereumis<br \/>\nNutilepingu t\u00e4itmine<br \/>\nEthereum virtuaalne masin<br \/>\nIntegreeritud arenduskeskkond Remix Solidity IDE<br \/>\nKompileerimise k\u00e4ivitamine<br \/>\nLepingu funktsioonide kutsumine<br \/>\nLepingu avaldamine privaatv\u00f5rgus<br \/>\nSaame ABI ja lepingu binaarkoodi m\u00e4\u00e4ratlemise<br \/>\nLepingu avaldamine<br \/>\nLepingu avaldamise tehingu oleku kontrollimine<br \/>\nLepingu funktsioonide kutsumine<br \/>\nSolc paketi kompilaator<br \/>\nSolc installimine Ubuntu-s<br \/>\nSolc installimine Debianis<br \/>\nHelloSol lepingu kompileerimine<br \/>\nLepingu avaldamine<br \/>\nSolc installimine Rasberianil<br \/>\nTunni kokkuv\u00f5te<\/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 \/>\nInstallatsioon Ubuntu-s<br \/>\nInstallatsioon Debianis<br \/>\nGanache-cli installimine ja k\u00e4ivitamine<br \/>\nWeb3 installimine<br \/>\nSolc installimine<br \/>\nNode.js installimine Rasberianil<br \/>\nSkript konto nimekirja saamiseks konsolis<br \/>\nSkript nutilepingu avaldamiseks<br \/>\nK\u00e4ivitamine ja parameetrite saamine<br \/>\nK\u00e4ivitamise parameetrite saamine<br \/>\nLepingu kompileerimine<br \/>\nKonto avamine<br \/>\nABI ja lepingu binaarkoodi laadimine<br \/>\nN\u00f5utava gaasikoguse hindamine<br \/>\nObjekti loomine ja lepingu avaldamise k\u00e4ivitamine<br \/>\nLepingu avaldamise skripti k\u00e4ivitamine<br \/>\nNutilepingu funktsioonide kutsumine<br \/>\nKas avaldatud nutilepingut on v\u00f5imalik uuendada<br \/>\nT\u00f6\u00f6 Web3 versiooniga 1.0.x<br \/>\nSaame kontode nimekirja<br \/>\nLepingu avaldamine<br \/>\nLepingu funktsioonide kutsumine<br \/>\nVahendite \u00fclev\u00f5tmine \u00fchelt kontolt teisele<br \/>\nVahendite \u00fclev\u00f5tmine lepingu kontole<br \/>\nUuendame nutilepingut HelloSol<br \/>\nLoome skripti konto saldo vaatamiseks<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 \/>\nT\u00e4iendame nutilepingu kontot<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">\u00d5ppetund 7. Sissejuhatus Truffle'i<\/b>Truffle'i installimine<br \/>\nLoome projekti HelloSol<br \/>\nProjekti kausta ja failide loomine<br \/>\nKataloog contracts<br \/>\nMigratsioonide kataloog<br \/>\nTestikataloog<br \/>\n\u0424\u0430\u0439\u043b truffle-config.js<br \/>\nHelloSol lepingu kompileerimine<br \/>\nLepingu avaldamise k\u00e4ivitamine<br \/>\nHelloSol lepingu funktsioonide kutsumine Truffle'i kutsel<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 \/>\nTruffle-contract mooduli installimine<br \/>\nGetValue ja getString funktsioonide kutsumine<br \/>\nSetValue ja setString funktsioonide kutsumine<br \/>\nLepingu muutmine ja uuesti avaldamine<br \/>\nT\u00f6\u00f6 Web3 versiooniga 1.0.x<br \/>\nTeeme muudatusi HelloSol nutika lepingu<br \/>\nLepingu meetodite kutsumise skriptid<br \/>\nTestimine Truffles<br \/>\nTest Solidity's<br \/>\nTest JavaScriptis<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">Tund 8. Solidity andmet\u00fc\u00fcbid<\/b>Lepingu andmet\u00fc\u00fcpide uurimiseks<br \/>\nLoogilised andmet\u00fc\u00fcbid<br \/>\nIlma m\u00e4rkideta ja m\u00e4rgiga t\u00e4isarvud<br \/>\nKindla koma numbrid<br \/>\nAadress<br \/>\nKomplekssete t\u00fc\u00fcpide muutujad<br \/>\nFikseeritud suurusega massiivid<br \/>\nD\u00fcnaamilised massiivid<br \/>\nLoetelu<br \/>\nStruktuurid<br \/>\nMapping s\u00f5nastikud<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">Tund 9. Lepingu migratsioon privaatsesse v\u00f5rku ja Rinkeby v\u00f5rku<\/b>Lepingu avaldamine Truffle'ist Gethi privaatsesse v\u00f5rku<br \/>\nPrivaatahela s\u00f5lme ettevalmistamine<br \/>\nLepingu ettevalmistamine t\u00f6\u00f6tamiseks<br \/>\nLepingu kompileerimine ja migratsioon Truffle'i v\u00f5rku<br \/>\nMigratsiooni k\u00e4ivitamine kohalikus geth v\u00f5rgus<br \/>\nTruffle artefaktide kaevandamine<br \/>\nLepingu avaldamine Truffle'ist Rinkeby testv\u00f5rgus<br \/>\nGethi s\u00f5lme ettevalmistamine Rinkebyga t\u00f6\u00f6tamiseks<br \/>\nS\u00f5lme s\u00fcnkroniseerimine<br \/>\nKontode lisamine<br \/>\nRinkeby konto t\u00e4iendamine etheriga<br \/>\nLepingu migratsiooni k\u00e4ivitamine Rinkeby v\u00f5rgus<br \/>\nLepingu teabe vaatamine Rinkeby v\u00f5rgus<br \/>\nTruffle'i konsool Rinkeby v\u00f5rgu jaoks<br \/>\nLihtsam viis lepingu funktsioonide kutsumiseks<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 \/>\nRahade \u00fclekandmine kontode vahel Rinkbyt Truffle'i konsoolis<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">Tund 10. Decentraliseeritud andmete salvestamine Ethereum Swarm<\/b>Kuidas Ethereum Swarm t\u00f6\u00f6tab<br \/>\nSwarm'i installimine ja k\u00e4ivitamine<br \/>\nFailide ja kataloogidega t\u00f6\u00f6tamine<br \/>\nFaili \u00fcleslaadimine Ethereum Swarm<br \/>\nFaili lugemine Ethereum Swarm'ist<br \/>\nLaaditud faili manifeste vaatamine<br \/>\nKataloogide \u00fcleslaadimine alamkataloogidega<br \/>\nFaili lugemine \u00fcleslaaditud kataloogist<br \/>\nAvaliku Swarm'i v\u00e4rava kasutamine<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 \/>\nPerl moodul Net::Ethereum::Swarm<br \/>\nNet::Ethereum::Swarm mooduli installimine<br \/>\nAndmete kirjutamine ja lugemine<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">Tund 11. Web3.py raamistik Ethereumiga t\u00f6\u00f6tamiseks Pythonis<\/b>Web3.py installimine<br \/>\nVaikimisi pakettide uuendamine ja installimine<br \/>\nEasysolc mooduli installimine<br \/>\nLepingu avaldamine Web3.py abil<br \/>\nLepingu kompileerimine<br \/>\nPakkujale \u00fchendamine<br \/>\nLepingu avaldamise teostamine<br \/>\nLepingu aadressi ja ABI salvestamine faili<br \/>\nLepingu avaldamise skripti k\u00e4ivitamine<br \/>\nLepingu meetodite kutsumine<br \/>\nLepingu aadressi ja ABI lugemine JSON failist<br \/>\nPakkujale \u00fchendamine<br \/>\nLepingu objekti loomine<br \/>\nLepingu meetodite kutsumine<br \/>\nTruffle ja Web3.py<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">Tund 12. Oraaklid<\/b>Kas nutikokkulepe v\u00f5ib usaldada andmeid v\u00e4lismaailmast<br \/>\nOraaklid kui plokiahela teabe vahendajad<br \/>\nAndmete allikas<br \/>\nKood andmete esitamiseks allikast<br \/>\nOraakel vahetuskursi salvestamiseks plokiahelasse<br \/>\nUSDRateOracle leping<br \/>\nVahetuskursi v\u00e4rskendamine nutilepingus<br \/>\nWeb Socket pakkuja kasutamine<br \/>\nRateUpdate s\u00fcndmuse ooteaeg<br \/>\nRateUpdate s\u00fcndmuse t\u00f6\u00f6tlemine<br \/>\nAndmete v\u00e4rskendamine nutilepingus<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p>Allikas: <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\/et\/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=\"et_EE\" \/>\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\/et\/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\udd47Raamat \u201eSolidity nutilepingute loomine Ethereum plokiahelas. Praktiline juhend\u201c | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/et\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/39018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=39018"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/39018\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/29275"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=39018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=39018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=39018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}