{"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\/novosti-interneta\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","title":{"rendered":"Raamat \"Solidity nutilepingute loomine Ethereum plokiahelas. Praktiline juhend\"","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Raamat &quot;Solidity nutilepingute loomine Ethereum plokiahelas. Praktiline juhend&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/9549e708e99fef6892045ff854231fa7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOlen t\u00f6\u00f6tanud rohkem kui aasta raamatu \u00abSolidity nutilepingute loomine Ethereum'i plokiahelas. Praktiline juhend\u00bb kallal ja n\u00fc\u00fcd on see t\u00f6\u00f6 l\u00f5petatud, 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 loomist Ethereum'i plokiahelas. See koosneb 12 \u00f5ppetunnist koos praktiliste \u00fclesannetega. Need t\u00e4ites suudab lugeja luua oma kohalikke Ethereum'i s\u00f5lmi, avaldada nutilepinguid ja kutsuda neid meetodeid, vahetada andmeid reaalmaailma ja nutilepingute vahel oraklite abil, t\u00f6\u00f6tada Rinkeby testv\u00f5rgus. <\/p>\n<p>Raamat on suunatud k\u00f5igile, kes tunnevad huvi plokiahela tipptasemel tehnoloogiate vastu ja soovivad kiiresti omandada teadmisi, mis v\u00f5imaldavad tegeleda huvitava ja perspektiivika t\u00f6\u00f6ga.<\/p>\n<p>Allpool leiate raamatu sisu ja esimese peat\u00fcki (ka <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">LitResis<\/a><\/noindex> on saadaval raamatu katked). Ootan tagasisidet, m\u00e4rkusi ja ettepanekuid. Kavatsen k\u00f5ike seda arvesse v\u00f5tta j\u00e4rgmise raamatu v\u00e4ljaande ettevalmistamisel.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Sisukord<\/b><b class=\"spoiler_title\">Sissejuhatus<\/b>Meie raamat on m\u00f5eldud neile, kes soovivad mitte ainult m\u00f5ista Ethereum'i plokiahela toimimise p\u00f5him\u00f5tteid, vaid ka omandada praktilisi oskusi ja luua sellel platvormil DApp-i rakendusi programmikeeles Solidity.<\/p>\n<p>Seda raamatut ei tohiks lihtsalt lugeda, vaid temaga tuleb aktiivselt t\u00f6\u00f6tada, 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. Paljude \u00fclesannete t\u00e4itmiseks saab kasutada ka Raspberry Pi'd.<\/p>\n<p><b>Esimeses \u00f5ppetunnis <\/b>k\u00e4sitleme Ethereum'i plokiahela toimimise p\u00f5him\u00f5tteid ja peamist terminoloogiat ning r\u00e4\u00e4gime ka sellest, kus seda plokiahelat kasutada. <\/p>\n<p>Eesm\u00e4rk <b>teises \u00f5ppetunnis<\/b> \u2014 luua privaatse Ethereum'i plokiahela s\u00f5lm, et edasi t\u00f6\u00f6tada k\u00e4esoleva kursuse raames Ubuntu ja Debian serveris. K\u00e4sitleme peamiste utiliitide, nagu geth, installimise erip\u00e4ra, mis tagab meie plokiahela s\u00f5lme toimimise, samuti detsentraliseeritud andmesalvestuse deemonit swarm.<\/p>\n<p><b>Kolmas \u00f5ppetund<\/b> \u00f5petab teid katsetama Ethereumiga odava Raspberry Pi mikroarvuti abil. Paigaldate Raspberry Pi-le operatsioonis\u00fcsteemi (OS) Rasberian, Gethi utiliidi, mis v\u00f5imaldab plokiahela s\u00f5lme t\u00f6\u00f6le hakkamist, ja detsentraliseeritud andmehoidla Swarm deemonit.<\/p>\n<p><b>Neljas \u00f5ppetund<\/b> on p\u00fchendatud kontodele ja kr\u00fcptovaluutadele Ethereumis, samuti vahenditele, kuidas \u00fclekandeid \u00fchelt kontolt teisele Gethi konsoolist teha. \u00d5pite looma kontosid, algatama raha\u00fclekandeid, saama tehingu olekut ja selle kviitungit.<\/p>\n<p><b>Viendal \u00f5ppetunnil<\/b> tutvute nutilepingutega Ethereumis ja saate teada, kuidas need t\u00f6\u00f6tavad Ethereum'i virtuaalses masinas. <\/p>\n<p>Loote ja avaldate oma esimese nutilepingu privaatsetes Ethereumi v\u00f5rkudes ning \u00f5pite, kuidas kutsuda selle funktsioone. Selleks kasutate Remix Solidity IDE arenduskeskkonda. Samuti \u00f5pite, kuidas paigaldada ja kasutada paketti solc.<br \/>\nLisaks r\u00e4\u00e4gime nii nimetatud rakenduse binaarsest liidesest (ABI) ning \u00f5petame, kuidas seda kasutada.<\/p>\n<p><b>Kuues \u00f5ppetund<\/b> on JavaScript'i skriptide loomisele, mis t\u00f6\u00f6tavad Node.js-i all ja t\u00e4idavad tegevusi Solidity nutilepingutega.<\/p>\n<p>Sa installid Node.js Ubuntu, Debian ja Raspberry Pi operatsioonis\u00fcsteemides, kirjutad skripte nutilepingute avaldamiseks lokaliseeritud Ethereum v\u00f5rgus ja nende funktsioonide kutsumiseks. <\/p>\n<p>Lisaks \u00f5pid skriptide abil edastama vahendeid tavaliste kontode vahel ning neid nutilepingute kontodele \u00fcle kandma.<\/p>\n<p><b>Seitsmendas tundis<\/b> \u00f5pid paigaldama ja kasutama arendajate seas populaarset nutilepingute keskkonda Truffle. \u00d5pid looma JavaScript'i skripte, mis kutsuvad lepingufunktsioone truffle-contract mooduli abil, samuti teed oma nutilepingu testimist Truffle'i vahenditega.<\/p>\n<p><b>Kaheksas tund<\/b> on p\u00fchendatud Solidity andmet\u00fc\u00fcpidele. Sa kirjutad nutilepingud, mis t\u00f6\u00f6tavad selliste andmet\u00fc\u00fcpidega nagu signeeritud ja signeerimata t\u00e4isarvud, ujuv Radeon, stringid, aadressid, keerukate t\u00fc\u00fcpide muutujad, massiivid, loendid, struktuurid ja s\u00f5nastikud.<\/p>\n<p><b>\u00dcheksandas tunnis<\/b> Te p\u00fcrgisite veel \u00fche sammu l\u00e4hemale nutilepingute loomisele Ethereum p\u00f5hiv\u00f5rgus. \u00d5pite avaldama lepinguid Truffle abil Gethi privaatv\u00f5rgus ning Rinkeby testv\u00f5rgus. Nutilepingute silumine Rinkeby v\u00f5rgus on v\u00e4ga kasulik enne lepingute avaldamist p\u00f5hiv\u00f5rgus \u2014 seal on k\u00f5ik praktiliselt reaalne, aga tasuta.<\/p>\n<p>Tunni raames loote Rinkeby testv\u00f5rgu s\u00f5lme, t\u00e4idate seda vahenditega ja avaldate nutilepingut.<\/p>\n<p><b>Tund 10<\/b> on p\u00fchendatud Ethereum Swarmi jaotatud andmesalvestustele. Jaotatud salvestuste kasutamine aitab teil s\u00e4\u00e4sta suuri andmemahte Ethereum plokiahelas. <\/p>\n<p>Selle tunni raames loote kohalikku Swarmi salvestust, teostate failide ja kaustade lugemise ja kirjutamise toimingud. Edasi \u00f5pite, kuidas t\u00f6\u00f6tada avaliku Swarmi v\u00e4ravaga, kirjutate skripte Swarmile juurde p\u00e4\u00e4semiseks Node.js kaudu ning samuti Perl mooduli Net::Ethereum::Swarm abil.<\/p>\n<p><b>Tunni eesm\u00e4rk 11<\/b> \u2014 hallata smart-lepingute t\u00f6\u00f6tlust Solidity rakendades populaarset programmeerimiskeelt Python ja raamistikku Web3.py. Te installite selle raamistikku, kirjutate skripte smart-lepingute kompileerimiseks ja avaldamiseks ning nende funktsioonide kutsumiseks. Samuti kasutatakse Web3.py nii iseseisvalt kui ka koos integreeritud arenduskeskkonna Truffle'iga.<\/p>\n<p><b>12. \u00f5ppetund<\/b> \u00f5pite edastama andmeid smart-lepingute ja reaalse maailma vahel oraaklite abil. See oskus on kasulik, et saada andmeid veebisaitidelt, asjade interneti (IoT) seadmetelt, erinevatelt instrumentidelt ja anduritelt ning edastada andmeid smart-lepingutest nende seadmete peale. \u00d5ppetunni praktilises osas loote oraakli ja smart-lepingu, mis saab v\u00e4rsket USD vahetuskurssi rubla suhtes Venemaa Pangast.<\/p>\n<p><b class=\"spoiler_title\">\u00d5ppetund 1. L\u00fchidalt plokiahela ja Ethereum\u2019i v\u00f5rgu kohta<\/b><b>\u00d5ppetunni eesm\u00e4rk:<\/b> tutvuda Ethereum\u2019i plokiahela t\u00f6\u00f6p\u00f5him\u00f5tetega, selle rakendusvaldkondadega ja p\u00f5hiterminoloogiaga.<br \/>\n<b>Praktilised \u00fclesanded:<\/b> selles \u00f5ppetunnis ei ole ette n\u00e4htud.<\/p>\n<p>T\u00e4nap\u00e4eval on raske leida tarkvaraarendajat, kes ei oleks kuulnud plokiahela (Blockchain) tehnoloogiast, kr\u00fcptovaluutadest (Cryptocurrency v\u00f5i Crypto Currency), bitcoiinidest (Bitcoin), esialgsest m\u00fc\u00fcgist (ICO, Initial Coin Offering), nutilepingutest (Smart Contract) ning teistest m\u00f5istetest ja terminidest, mis on seotud plokiahnega.<\/p>\n<p>Plokiahela tehnoloogia avab uusi turge ja loob t\u00f6\u00f6kohti programmeerijatele. Kui m\u00f5istate kr\u00fcptovaluutade ja nutilepingute tehnoloogiaid, ei tohiks teil nende teadmiste rakendamisel probleeme olla.<\/p>\n<p>On oluline m\u00e4rkida, et kr\u00fcptovaluutade ja plokiahela \u00fcmber on palju spekulatsioone. J\u00e4tame k\u00f5rvale arutelud kr\u00fcptovaluutade kursside muutuste, pyramidide loomise ja kr\u00fcptovaluutade seadusandluse n\u00fcansside kohta. Meie \u00f5pikursusel keskendume peamiselt nutilepingute tehnilistele aspektidele Ethereum plokiahelas (Ethereum, Eeter) ja nn detsentraliseeritud rakenduste (Distributed Application, DApp) arendamisele.<\/p>\n<h3>Mis on plokiahel<\/h3>\n<p>\nPlokiahel (Blockchain, Block Chain) on andmete plokkide ahel, mis on omavahel teatud moel seotud. Ahela alguses asub esimene plokk, mida nimetatakse algplokiks (genesis block) v\u00f5i geneesi plokiks. Sellele j\u00e4rgneb teine, seej\u00e4rel kolmas ja nii edasi.<\/p>\n<p>K\u00f5iki neid andmeplokke dubleeritakse automaatselt paljudes plokiahela v\u00f5rgus\u00f5lmedes. Nii tagatakse plokiahela andmete detsentraliseeritud salvestamine. <br \/>\nSa v\u00f5id kujutada plokiahela s\u00fcsteemi nagu suurt hulka s\u00f5lmi (f\u00fc\u00fcsilisi v\u00f5i virtuaalseid servereid), mis on \u00fchendatud v\u00f5rku ja replikeerivad k\u00f5iki muudatusi andmeplokkide ahelas. See on nagu hiiglaslik multi-server arvuti, kus sellise arvuti s\u00f5lmed (serverid) v\u00f5ivad olla \u00fcle kogu maailma. Ja sina saad samuti oma arvuti plokiahela v\u00f5rku lisada. <\/p>\n<h4>Jaotatud andmebaas<\/h4>\n<p>\nPlokiahelat saab esitada jaotatud andmebaasina, mis replikeeritakse k\u00f5igile plokiahela v\u00f5rgus\u00f5lmedele. Teoorias, plokiahel t\u00f6\u00f6taks seni, kuni t\u00f6\u00f6tab v\u00e4hemalt \u00fcks s\u00f5lm, mis salvestab k\u00f5ik plokiahela plokid.<\/p>\n<h4>Jaotatud andmete registri<\/h4>\n<p>\nPlokiahel v\u00f5ib m\u00f5ista kui andmete ja tehingute (tehingute) jaotatud registrit. Selle registri teine nimetus on raamatupidamine. <\/p>\n<p>Jaotatud registrisse saab andmeid lisada, kuid neid ei saa muuta ega kustutada. See on saavutatav osaliselt kr\u00fcptograafiliste algoritmide, plokkide lisamise spetsiifiliste algoritmide ja andmete detsentraliseeritud salvestamise abil.<\/p>\n<p>Plokkide lisamisel ja tehingute (tehingute) l\u00e4biviimisel kasutatakse erase 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 tehingute (tehingute) kohta plokkides. Samas ei saa vanu, juba teostatuid tehinguid tagasi p\u00f6\u00f6rata ega muuta. Uued tehingud salvestatakse uutesse, lisatud plokkidesse.<\/p>\n<p>Seega v\u00f5ib plokiahelas olla nende tehingute kogu ajalugu muutumatul kujul. Seet\u00f5ttu saab plokiahelat kasutada n\u00e4iteks usaldusv\u00e4\u00e4rseks pangatehingute, autori\u00f5iguse andmete, kinnisvarade omanike muudatuste ajaloo jms salvestamiseks.<\/p>\n<p>Ethereum'i plokiahel sisaldab nn s\u00fcsteemi seisundeid. Tehingute sooritamisel muutub olek algsest kuni k\u00e4esolevani. Tehingud registreeritakse plokkides.<\/p>\n<h4>Avalikud ja privaatsed plokiahelad<\/h4>\n<p>\nSiinkohal tuleb m\u00e4rkida, et k\u00f5ik \u00f6eldu kehtib ainult nn avalike plokiahelate v\u00f5rks\u00fcsteemide kohta, mida ei saa kontrollida \u00fcksikud f\u00fc\u00fcsilised v\u00f5i juriidilised isikud, riigiasutused v\u00f5i valitsused. <br \/>\nNn privaatsed plokiahelad on t\u00e4ielikult nende loojate kontrolli all, kus on v\u00f5imalik teha k\u00f5ike, n\u00e4iteks asendada kogu plokikahel.<\/p>\n<h4>Plokiahela praktilised rakendused<\/h4>\n<p>\nKuidas v\u00f5ib plokiahel kasulik olla?<\/p>\n<p>L\u00fchidalt \u00f6eldes v\u00f5imaldab plokiahel turvaliselt teostada toiminguid (tehinguid) isikute v\u00f5i ettev\u00f5tete vahel, kes ei usalda teineteist. Plokiahelas registreeritud andmeid (tehingud, isikuandmed, dokumendid, tunnistused, lepingud, saatedokumendid jne) ei saa p\u00e4rast salvestamist v\u00f5ltsida ega asendada. Seet\u00f5ttu on plokiahela p\u00f5hjal v\u00f5imalik luua n\u00e4iteks usaldusv\u00e4\u00e4rseid jaotatud registrite erinevaid dokumente.<\/p>\n<p>Muidugi, te teate, et plokiahelate alusel luuakse kr\u00fcptovaluuta s\u00fcsteeme, mis on m\u00f5eldud asendama tavalisi paberraha. Paberraha nimetatakse ka fiatrahaks (Fiat Money).<br \/>\nPlokiahel tagab tehingute salvestamise ja muutumatuse, mis on salvestatud plokkides, seega saab seda kasutada kr\u00fcptovaluuta s\u00fcsteemide loomiseks. See sisaldab kogu ajaloo kr\u00fcptoressursside edastamisest erinevate kasutajate (kontode) vahel, ning iga tehingut saab j\u00e4lgida.<\/p>\n<p>Kuigi kr\u00fcptovaluuta s\u00fcsteemide sees olevad tehingud v\u00f5ivad olla anon\u00fc\u00fcmsed, toob kr\u00fcptovaluuta v\u00e4ljav\u00f5tmine ja selle fiatrahaks vahetamine tavaliselt kaasa kr\u00fcptovaluuta omaniku isiku avalikustamise. <\/p>\n<p>Nii nimetatud nutikontrollid, mis on tarkvara, mis t\u00f6\u00f6tab Ethereum'i v\u00f5rgus, v\u00f5imaldavad automatiseerida tehingute s\u00f5lmimise protsessi ja nende t\u00e4itmise j\u00e4lgimist. See on eriti efektiivne, kui tehingu maksmine toimub Ether (eetri) kr\u00fcptovaluutas.<\/p>\n<p>Ethereum'i plokiahel ja Ethereum'i nutikontrollid, mis on kirjutatud Solidity programmeerimiskeeles, v\u00f5ivad olla n\u00e4iteks kasutusel j\u00e4rgmistes valdkondades:<\/p>\n<ul>\n<li>notariaadi asendaja dokumentide kinnitamiseks;<\/li>\n<li>kinnisvara objektide registri ja tehingute andmete hoidmine;<\/li>\n<li>intellektuaalomandi objektide autori\u00f5iguste andmete hoidmine (raamatud, pildid, muusikateosed jne);<\/li>\n<li>iseseisva h\u00e4\u00e4lte andmise s\u00fcsteemide loomine;<\/li>\n<li>rahanduse ja panganduse valdkond;<\/li>\n<li>rahvusvaheline logistikategevus, kauba liikumise j\u00e4lgimine;<\/li>\n<li>isikuandmete s\u00e4ilitamine, analoogne isikut t\u00f5endavate dokumentidega;<\/li>\n<li>turvalised tehingud kaubanduses;<\/li>\n<li>meditsiiniliste uuringute tulemuste ja m\u00e4\u00e4ratud protseduuride ajaloo s\u00e4ilitamine;<\/li>\n<\/ul>\n<p><\/p>\n<h4>Probleemid plokiahelaga<\/h4>\n<p>\nKuid, loomulikult, ei ole k\u00f5ik nii lihtne, nagu v\u00f5ib tunduda! <\/p>\n<p>Andmete valideerimisega, enne nende plokiahelasse lisamist, on probleeme (n\u00e4iteks, kas need on ehtsad?), s\u00fcsteemide ja rakendusprogrammi turvalisus, mis on plokiahelaga t\u00f6\u00f6tamiseks kasutusel, ning probleemid sotsiaalsete inseneritehnika meetodite kasutamise v\u00f5imalusega, et varastada juurdep\u00e4\u00e4s kr\u00fcptoraha rahakottidele jne.<\/p>\n<p>Kui tegemist ei ole avaliku plokiahelaga, mille s\u00f5lmed on laiali \u00fcle maailma, vaid isikliku v\u00f5i organisatsiooni plokiahelaga, siis ei ole usaldusv\u00e4\u00e4rsuse tase k\u00f5rgem kui isiku v\u00f5i organisatsiooni usaldusv\u00e4\u00e4rsuse tase.<\/p>\n<p>Samuti tasub arvestada, et plokiahelasse salvestatud andmed muutuvad kergesti k\u00e4ttesaadavaks. Seet\u00f5ttu ei sobi plokiahel (eriti avalik) konfidentsiaalsete andmete hoidmiseks. Siiski v\u00f5ib see, et teavet plokiahelas ei saa muuta, aidata ennetada v\u00f5i uurida erinevaid pettusi.<\/p>\n<p>Ethereumile p\u00f5hinevad detsentraliseeritud rakendused on mugavad, kui tasuda nende kasutamise eest kr\u00fcptorahaga. Mida rohkem inimesi omab kr\u00fcptoraha v\u00f5i on valmis seda ostma, seda populaarsemaks saavad DApp rakendused ja nutikad lepingud.<\/p>\n<p>Blockchain'i praktilise rakendamise peamised probleemid h\u00f5lmavad piiratud uut bloki lisamise kiirusest ja suhteliselt k\u00f5rget tehingutasu. Kuid selles valdkonnas arenevad tehnoloogiad aktiivselt, ja on lootust, et tehnilised probleemid lahendatakse aja jooksul.<\/p>\n<p>Veel \u00fcks probleem on see, et Ethereum'i plokiahela nutilepingud t\u00f6\u00f6tavad isoleeritud virtuaalmasinate keskkonnas, millel puudub juurdep\u00e4\u00e4s reaalmaailma andmetele. Eelk\u00f5ige ei saa nutilepingu programm ise andmeid lugeda veebisaitidelt ega mistahes f\u00fc\u00fcsilistelt seadmetelt (andurid, kontaktid jne) ning ei saa saata andmeid v\u00e4lisseadmetele. Selle probleemi ja selle lahendamise viise arutame \u00f5ppetunnis, mis k\u00e4sitleb nn orakleid \u2014 nutilepingute informatiivseid vahendajaid.<\/p>\n<p>Samuti on seadusandluses piiranguid. M\u00f5nes riigis, n\u00e4iteks keelatakse kr\u00fcptovaluuta kasutamine maksevahendina, kuid selle omamine on lubatud kui digitaalne vara, sarnane v\u00e4\u00e4rtpaberitega. Selliseid varasid saab osta ja m\u00fc\u00fca b\u00f6rsil. Igatahes on kr\u00fcptovaluutadega t\u00f6\u00f6tava projekti loomisel vajalik tutvuda selle riigi seadustega, mille all teie projekt tegutseb.<\/p>\n<h3>Kuidas moodustub plokiahel<\/h3>\n<p>\nNagu oleme juba maininud, on plokiahel lihtne andmablokkide ahel. Alustatakse esimese bloki moodustamisega, seej\u00e4rel lisatakse sellele teine ja nii edasi. Eeldatakse, et tehingute andmed salvestatakse blokkidesse ning lisatakse viimasele blokile.<\/p>\n<p>Joonisel 1.1 oleme n\u00e4idanud lihtsaimat blokiseeria j\u00e4rjekorda, kus esimene blokk viitab j\u00e4rgmisele. <\/p>\n<p><img decoding=\"async\" alt=\"Raamat &quot;Solidity nutilepingute loomine Ethereum plokiahelas. Praktiline juhend&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/23ca04ba2c8914334032523d01bf8b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Joonis 1.1. Lihtne blokiseeria<\/i><\/p>\n<p>Kuid sellises variandis on v\u00e4ga lihtne manipulatsiooni kaudu igasuguste plokkide sisu v\u00f5ltsida, kuna plokid ei sisalda muud teavet, mis kaitseks muudatuste eest. Arvestades, et plokiahel on m\u00f5eldud inimestele ja ettev\u00f5tetele, kelle vahel ei ole usaldust, v\u00f5ib j\u00e4reldada, et selline andmete salvestamise viis plokiahela jaoks ei sobi.<\/p>\n<p>Hakkame kaitsma plokke v\u00f5ltsimise eest. Esimeses etapis proovime iga ploki kaitsta kontrollsumma (vt joonis 1.2) abil.<\/p>\n<p><img decoding=\"async\" alt=\"Raamat &quot;Solidity nutilepingute loomine Ethereum plokiahelas. Praktiline juhend&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/141502accec14e868a9382c612cfc791.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Joonis 1.2. Lisame plokkide andmete kaitseks kontrollsumma<\/i><\/p>\n<p>N\u00fc\u00fcd ei saa r\u00fcndaja plokki lihtsalt muuta, kuna sellel on ploki andmete kontrollsumma. Kontrollsumma kontrollimine n\u00e4itab, et andmed on muutunud.<\/p>\n<p>Kontrollsumma arvutamiseks v\u00f5ib kasutada \u00fchte hash-funktsiooni, nagu MD-5, SHA-1, SHA-256 jne. Hash-funktsioonid arvutavad mingisuguse v\u00e4\u00e4rtuse (n\u00e4iteks fikseeritud pikkusega tekstirea), kasutades p\u00f6\u00f6rdumatuid operatsioone andmeplokiga. Operatsioonid s\u00f5ltuvad hash-funktsiooni t\u00fc\u00fcbist. <\/p>\n<p>Isegi v\u00e4ikseima andmepaketi sisu muutumise korral muutub ka tema hash-funktsiooni v\u00e4\u00e4rtus. Anal\u00fc\u00fcsides hash-funktsiooni v\u00e4\u00e4rtust, ei ole v\u00f5imalik taastada andmepaketti, mille jaoks see arvutati.<\/p>\n<p>Kas selline kaitse on piisav? Kahjuks ei.<\/p>\n<p>Selles skeemis kaitseb kontrollsumma (hash-funktsioon) ainult \u00fcksikuid andmepakette, mitte kogu pakettide ahelat. Teades hash-funktsiooni arvutamise algoritmi, saab sissetungija h\u00f5lpsasti paketi sisu muuta. Samuti ei saa miski takistada tal eemaldamast ketti kuuluvaid pakette v\u00f5i lisamast uusi.<\/p>\n<p>Kogu ahela kaitsmiseks saab igas pakendis koos andmetega hoida ka eelneva paketi hash'i (vt joonis 1.3).<\/p>\n<p><img decoding=\"async\" alt=\"Raamat &quot;Solidity nutilepingute loomine Ethereum plokiahelas. Praktiline juhend&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/f414ab67dbabc763c537a430e01ed065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Joonis 1.3. Lisame andmepaketti eelneva paketi hash'i<\/i><\/p>\n<p>Selles skeemis, et muuta m\u00f5nda paketti, tuleb uuesti arvutada k\u00f5ikide j\u00e4rgneva paketi hash-funktsioonid. Tundub, et mis probleem?<\/p>\n<p>Tegelikult blockchainides on uute plokkide lisamiseks loodud kunstlikke raskusi \u2014 kasutatakse algoritme, mis n\u00f5uavad palju arvutusressursse. Arvestades, et ploki muutmiseks peab \u00fcle arvestama mitte ainult selle ploki, vaid ka k\u00f5ik j\u00e4rgnevad, on seda \u00e4\u00e4rmiselt keeruline teha.<\/p>\n<p>Peame meeles, et blockchaini andmed on salvestatud (dubleeritud) arvukatesse v\u00f5rgu s\u00f5lmedesse, st kasutatakse detsentraliseeritud salvestust. See muudab ploki valeandmete lisamise kordades keerulisemaks, kuna muudatused tuleb teha k\u00f5ikides v\u00f5rgu s\u00f5lmedes.<\/p>\n<p>Kuna plokid hoiavad teavet eelmise ploki kohta, on v\u00f5imalik kontrollida kogu ahela plokkide sisu.<\/p>\n<h3>Ethereum blockchain<\/h3>\n<p>\nEthereum blockchain on platvorm, millel saab luua jaotatud 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, Bitcoin Magazine'i asutaja poolt, ja k\u00e4ivitatud 2015. aastal. K\u00f5ik, mida me uurime v\u00f5i teeme meie \u00f5pikursusel, on seotud Ethereum'i plokiahela ja Solidity nutilepingutega.<\/p>\n<h3>Kaevandamine v\u00f5i kuidas loodakse blokke<\/h3>\n<p>\nKaevandamine (mining) on \u00fcsna keeruline ja ressursimahukas protsess, mille k\u00e4igus lisatakse uusi blokke plokiahela ahelasse, mitte lihtsalt \u201ekr\u00fcptorahade kaevandamine\u201c. Kaevandamine tagab plokiahela toimimise, kuna just see protsess vastutab tehingute lisamise eest Ethereum'i plokiahelasse.<\/p>\n<p>Inimesi ja organisatsioone, kes lisavad blokke, nimetatakse kaevandajateks (miner).<br \/>\nKaevandajate s\u00f5lmedes t\u00f6\u00f6tav tarkvara (SO) proovib viimane blokk esitada hash-parameteri, mida nimetatakse Nonce, et saavutada teatud v\u00e4\u00e4rtus hash-funktsioonis, nagu see on m\u00e4\u00e4ratud v\u00f5rgus. Ethereum'is kasutatav Ethash hash-algoritm v\u00f5imaldab Nonce v\u00e4\u00e4rtust saada ainult j\u00e4rjestikuse testimise teel. <\/p>\n<p>Kui kaevuri node leiab \u00f5ige Nonce'i v\u00e4\u00e4rtuse, on see nn t\u00f6\u00f6 t\u00f5end (PoW, Proof-of-work). Sel juhul, kui plokk lisatakse Ethereum'i v\u00f5rku, saab kaevur teatud tasu v\u00f5rgu valuutas \u2014 Etheris. Meie raamatukirjutamise hetkel on tasu 5 Etherit, kuid aja jooksul v\u00e4heneb see.<\/p>\n<p>Seega tagavad Ethereum'i kaevurid v\u00f5rgu toimimise, lisades plokke, ja saavad selle eest kr\u00fcptovaluutat. Internetis leiate hulgaliselt teavet kaevurite ja kaevandamise kohta, kuid keskendume Solidity lepingute ja detsentraliseeritud rakenduste (DApp) loomisele Ethereum'i v\u00f5rgus.<\/p>\n<h3>Tunni kokkuv\u00f5te<\/h3>\n<p>\nEsimesel tunnil tutvustasite plokiahelat ja \u00f5ppisite, et see on erilise viisil koostatud plokkide j\u00e4rjekord. Varasemate plokkide sisu ei ole v\u00f5imalik muuta, kuna selleks tuleks \u00fcmber arvutada k\u00f5ik j\u00e4rgmised plokid paljudes v\u00f5rgu nodes, mis n\u00f5uab v\u00e4ga palju ressursse ja aega.<\/p>\n<p>Plokiahel v\u00f5ib rakendada tehingute t\u00e4itmise tulemuste s\u00e4ilitamiseks. Selle peamine eesm\u00e4rk on korraldada turvalist tehingute t\u00e4itmist isikute (inimeste ja organisatsioonide) vahel, kelle vahel pole usaldust. Olete teada saanud, millistes \u00e4rivaldkondades ja millistes valdkondades saab kasutada plokiahelat Ethereum ja nutikaid lepinguid Solidity. Need on pangandussektor, omandi\u00f5iguste ja dokumentide registreerimine jne.<\/p>\n<p>Olete samuti teada saanud, et plokiahela kasutamisel v\u00f5ivad tekkida erinevad probleemid. Need probleemid on seotud plokiahelasse lisatud teabe verifitseerimise, plokiahela t\u00f6\u00f6 kiirus, tehingute kulud, andmevahetus nutikate lepingute ja reaalse maailma vahel ning samuti potentsiaalsed r\u00fcnnakud kurjategijatelt, mille eesm\u00e4rk on varastada kr\u00fcptovaluuta varasid kasutajate kontodelt.<\/p>\n<p>Kohati r\u00e4\u00e4kisime ka kaevandamisest kui protsessist, mille k\u00e4igus lisatakse uusi plokke plokiahelasse. Kaevandamine on vajalik tehingute t\u00e4itmiseks. Need, kes tegelevad kaevandamisega, tagavad plokiahela toimimise ja saavad selle eest tasu kr\u00fcptovaluutas.<\/p>\n<p><b class=\"spoiler_title\">2. \u00f5ppetund. T\u00f6\u00f6keskkonna ettevalmistamine Ubuntu ja Debian OS-is<\/b>Operatsioonis\u00fcsteemi valimine<br \/>\nVajalikud utiliidid<br \/>\nGethi ja Swarmi installimine Ubuntu-s<br \/>\nGethi ja Swarmi installimine Debianis<br \/>\nEelnevad ettevalmistused<br \/>\nGo jaotuse allalaadimine<br \/>\nKeskkonna muutujate seadistamine<br \/>\nGo versiooni kontrollimine<br \/>\nGethi ja Swarmi 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 \/>\nAlgatame s\u00f5lme<br \/>\nS\u00f5lme k\u00e4ivitamise parameetrid<br \/>\n\u00dchendame oma s\u00f5lmega<br \/>\nKaevandamise haldamine ja saldode kontrollimine<br \/>\nGethi konsooli sulgemine<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">3. \u00f5ppetund. T\u00f6\u00f6keskkonna ettevalmistamine Raspberry Pi 3-l<\/b>Raspberry Pi 3 ettevalmistamine t\u00f6\u00f6ks<br \/>\nRasberiani installimine<br \/>\nUuenduste installimine<br \/>\nSSH juurdep\u00e4\u00e4su lubamine<br \/>\nStaatilise IP-aadressi seadistamine<br \/>\nVajalikud utiliidid<br \/>\nGo installimine<br \/>\nGo jaotuse allalaadimine<br \/>\nKeskkonna muutujate seadistamine<br \/>\nGo versiooni kontrollimine<br \/>\nGethi ja Swarmi installimine<br \/>\nLoome privaatse plokiahela<br \/>\nKonto ja saldo kontrollimine<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">4. \u00f5ppetund. Kontod ja vahendite \u00fclekandmine kontode vahel<\/b>Kontode vaatamine ja lisamine<br \/>\nKontode loendi vaatamine<br \/>\nKonto lisamine<br \/>\ngeth account k\u00e4su parameetrid<br \/>\nKonto paroolid<br \/>\nKr\u00fcptovaluutad Ethereumis<br \/>\nEthereum\u2019i rahandus<br \/>\nKontode hetke saldo m\u00e4\u00e4ramine<br \/>\nVahendite \u00fclekandmine \u00fchelt kontolt teisele<br \/>\nmeetod eth.sendTransaction<br \/>\nTehingu oleku vaatamine<br \/>\nTehingu kviitung<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">5. \u00f5ppetund. Esimese nutilepingute avaldamine<\/b>Nutitelefonid Ethereumis<br \/>\nNutilepingu t\u00e4itmine<br \/>\nEthereum Virtual Machine<br \/>\nIntegratsioonikeskkond Remix Solidity IDE<br \/>\nKompileerimise k\u00e4ivitamine<br \/>\nKontraktiloome kutsumine<br \/>\nKontrakti avaldamine privaatv\u00f5rgus<br \/>\nSaame ABI m\u00e4\u00e4ratlemise ja kontrakti binaarkoodi<br \/>\nKontrakti avaldamine<br \/>\nKontrakti avaldamise tehingu staatuse kontrollimine<br \/>\nKontraktiloome kutsumine<br \/>\nPakettkompilaator solc<br \/>\nsolc installimine Ubuntu-s<br \/>\nsolc installimine Debianis<br \/>\nHelloSol kontrakti kompileerimine<br \/>\nKontrakti 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 \/>\nNutilepingu avaldamise skript<br \/>\nK\u00e4ivitamine ja parameetrite saamine<br \/>\nK\u00e4ivitamise parameetrite saamine<br \/>\nKompileerimine<br \/>\nKonto avamine<br \/>\nABI ja kontrakti binaarkoodi laadimine<br \/>\nVajaliku gaasi hindamine<br \/>\nObjekti loomine ja kontrakti avaldamise k\u00e4ivitamine<br \/>\nKontraktiloome skripti k\u00e4ivitamine<br \/>\nNutilepingu funktsioonide kutsumine<br \/>\nKas avaldatud nutilepingut on v\u00f5imalik uuendada<br \/>\nWeb3 versiooniga 1.0.x t\u00f6\u00f6tamine<br \/>\nSaame konto nimekirja<br \/>\nKontrakti avaldamine<br \/>\nKontraktiloome kutsumine<br \/>\nVahendite \u00fclekandmine \u00fchelt kontolt teisele<br \/>\nFunds transferring to contract account<br \/>\nUuendame HelloSol nutilepingut<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\u00e4idame nutilepingu kontot<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">Tund 7. Sissejuhatus Truffle'i<\/b>Truffle'i paigaldamine<br \/>\nLoome HelloSol projekti<br \/>\nProjekti katalooge ja faile loomine<br \/>\nKataloog contracts<br \/>\nKataloog migrations<br \/>\nKataloog test<br \/>\n\u0424\u0430\u0439\u043b truffle-config.js<br \/>\nHelloSol kontrakti kompileerimine<br \/>\nLepingu avaldamise k\u00e4ivitamine<br \/>\nHelloSol nutilepingute funktsioonide kutsumine Truffle'i kutses<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 paigaldamine<br \/>\nKutsume funktsioone getValue ja getString<br \/>\nKutsume funktsioone setValue ja setString<br \/>\nLepingu muutmine ja uuesti avaldamine<br \/>\nWeb3 versiooniga 1.0.x t\u00f6\u00f6tamine<br \/>\nTeeme muudatused HelloSol nutilepingusse<br \/>\nMeetodite kutsumise skriptid<br \/>\nTestimine Truffle'is<br \/>\nTest Solidity's<br \/>\nTest JavaScript'is<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">Tund 8. Solidity andmet\u00fc\u00fcbid<\/b>Leping andmet\u00fc\u00fcpide uurimiseks<br \/>\nLoogilised andmet\u00fc\u00fcbid<br \/>\nIlma m\u00e4rgita ja signeeritud t\u00e4isarvud<br \/>\nFikseeritud komaga numbrid<br \/>\nAadress<br \/>\nKomplekssete t\u00fc\u00fcpide muutujaid<br \/>\nFikseeritud suurusega massiivid<br \/>\nD\u00fcnaamilised massiivid<br \/>\nNumbrilised loetelud<br \/>\nStruktuurid<br \/>\nMapping-diktsioon\u00e4rid<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">Tund 9. Lepingu migratsioon privaatsetesse v\u00f5rkudesse ja Rinkeby v\u00f5rkudele<\/b>Lepingu avaldamine Truffle'ist privaatv\u00f5rku Geth<br \/>\nPrivaatv\u00f5rgu s\u00f5lme ettevalmistamine<br \/>\nLepingu ettevalmistamine t\u00f6\u00f6tamiseks<br \/>\nLepingu kompileerimine ja migreerimine Truffle'i v\u00f5rgus<br \/>\nMigratsiooni k\u00e4ivitamine Geth kohaliku v\u00f5rku<br \/>\nTruffle'i artefaktide kaevandamine<br \/>\nTruffle'i lepingute avaldamine Rinkeby testv\u00f5rgus<br \/>\nGethi s\u00f5lme ettevalmistamine Rinkeby'ga t\u00f6\u00f6tamiseks<br \/>\nS\u00f5lme s\u00fcnkroniseerimine<br \/>\nKonto lisamine<br \/>\nRinkeby kontole etheeri lisamine<br \/>\nLepingu migratsiooni k\u00e4ivitamine Rinkeby v\u00f5rgus<br \/>\nLepingu teabe vaatamine Rinkeby v\u00f5rgus<br \/>\nTruffle'i konsool Rinkeby v\u00f5rgus<br \/>\nLihtsam viis lepingufunktsioonide 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 \/>\nVahendite \u00fclekandmine kontode vahel Truffle'i konsoolis Rinkeby jaoks<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">Tund 10. Decentraliseeritud andmesalvestus 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'i<br \/>\nFaili lugemine Ethereum Swarm'ist<br \/>\nLaaditud faili manfestiga tutvumine<br \/>\nKataloogide ja alamkataloogide \u00fcleslaadimine<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'i moodul Net::Ethereum::Swarm<br \/>\nMooduli Net::Ethereum::Swarm installimine<br \/>\nAndmete kirjutamine ja lugemine<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">Tund 11. Web3.py raamistik Ethereumiga Pythonis<\/b>Web3.py installimine<br \/>\nVajalikud paketid uuendamine ja installimine<br \/>\nEasysolc mooduli installimine<br \/>\nLepingu avaldamine Web3.py abil<br \/>\nKompileerimine<br \/>\n\u00dchendamine teenusepakkujaga<br \/>\nLepingu avaldamise teostamine<br \/>\nLepingu aadress ja abi faili salvestamine<br \/>\nKontraktiloome skripti k\u00e4ivitamine<br \/>\nLepingu meetodite kutsumine<br \/>\nLepingu aadressi ja abi lugemine JSON-failist<br \/>\n\u00dchendamine teenusepakkujaga<br \/>\nLepingu objekti loomine<br \/>\nLepingu meetodite kutsumine<br \/>\nTruffle ja Web3.py<br \/>\nTunni kokkuv\u00f5te<\/p>\n<p><b class=\"spoiler_title\">\u00d5ppeosa 12. Oraaklid<\/b>Kas nutileping v\u00f5ib usaldada v\u00e4lismaailma andmeid<br \/>\nOraaklid kui plokiahela teabe vahendajad<br \/>\nAndmeallikas<br \/>\nKood andmete esitlemiseks allikast<br \/>\nOraakel, et salvestada vahetuskursi plokiahelasse<br \/>\nLepingu USDRateOracle<br \/>\nVahetuskursi v\u00e4rskendamine nutilepingus<br \/>\nWeb Socket'i pakkuja kasutamine<br \/>\nRateUpdate s\u00fcndmust ootamine<br \/>\nRateUpdate s\u00fcndmuse t\u00f6\u00f6tlemine<br \/>\nAndmete v\u00e4rskendamise algatamine 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-novosti-interneta"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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\/novosti-interneta\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\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:description\" content=\"\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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/novosti-interneta\/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 \u00abSolidity nutilepingute loomine Ethereum plokiahelale. Praktiline juhend\u00bb | ProHoster","description":"Rohkem kui aasta olen t\u00f6\u00f6tanud raamatu \u00abSolidity nutilepingute loomine Ethereum plokiahelale. Praktiline juhend\u00bb kallal, ja n\u00fc\u00fcd on see t\u00f6\u00f6 l\u00f5petatud, raamat v\u00e4lja antud ja saadaval Litresis. Loodan, et minu raamat aitab kiiresti alustada Solidity nutilepingute ja jaotatud rakenduste DApp loomisega Ethereum plokiahelas. See koosneb 12 \u00f5pikust praktiliste \u00fclesannetega. Nende t\u00e4itmisega lugeja","canonical_url":"https:\/\/prohoster.info\/et\/blog\/novosti-interneta\/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:description":"\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","og:url":"https:\/\/prohoster.info\/et\/blog\/novosti-interneta\/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"},"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}]}}