{"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\/hr\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","title":{"rendered":"Knjiga \"Izrada pametnih ugovora Solidity za blockchain Ethereum. Prakti\u010dni vodi\u010d\"","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Knjiga &quot;Izrada pametnih ugovora Solidity za blockchain Ethereum. Prakti\u010dni vodi\u010d&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/9549e708e99fef6892045ff854231fa7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVi\u0161e od godinu dana radio sam na knjizi 'Izrada pametnih ugovora Solidity za Ethereum blockchain. Prakti\u010dni vodi\u010d', i sada je ovaj rad zavr\u0161en, a knjiga <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">izdana i dostupna na Litresu<\/a><\/noindex>.<\/p>\n<p>Nadam se da \u0107e moja knjiga pomo\u0107i da se brzo krenete u izradu pametnih ugovora Solidity i decentraliziranih aplikacija DApp za Ethereum blockchain. Sadr\u017ei 12 lekcija s prakti\u010dnim zadacima. Izvr\u0161avaju\u0107i ih, \u010ditatelj \u0107e mo\u0107i kreirati vlastite lokalne \u010dvorove Ethereum, objaviti pametne ugovore i pozivati njihove metode, razmjenjivati podatke izme\u0111u stvarnog svijeta i pametnih ugovora pomo\u0107u oracle-a, raditi s testnom debug mre\u017eom Rinkeby. <\/p>\n<p>Knjiga je namijenjena svima koji su zainteresirani za napredne tehnologije u podru\u010dju blockchaina i \u017eele brzo ste\u0107i znanja koja \u0107e im omogu\u0107iti zanimljiv i perspektivan rad.<\/p>\n<p>Ispod \u0107ete prona\u0107i sadr\u017eaj i prvo poglavlje knjige (tako\u0111er na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">Litresu<\/a><\/noindex> dostupni su izvadci iz knjige). Nadam se dobiti povratne informacije, primjedbe i prijedloge. Sve \u0107u to poku\u0161ati uzeti u obzir prilikom pripreme sljede\u0107e edicije knjige.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Sadr\u017eaj<\/b><b class=\"spoiler_title\">Uvod<\/b>Na\u0161a knjiga namijenjena je onima koji \u017eele ne samo razumjeti principe rada Ethereum blockchaina, ve\u0107 i ste\u0107i prakti\u010dne vje\u0161tine u izradi decentraliziranih aplikacija DApp na programskom jeziku Solidity za ovu mre\u017eu.<\/p>\n<p>Ovu knjigu je najbolje ne samo \u010ditati, ve\u0107 raditi s njom, izvr\u0161avaju\u0107i prakti\u010dne zadatke opisane u lekcijama. Za rad \u0107e vam trebati lokalno ra\u010dunalo, virtualni ili obla\u010dni poslu\u017eitelj s instaliranim Debian ili Ubuntu OS-om. Tako\u0111er, za mnoge zadatke mo\u017eete koristiti Raspberry Pi.<\/p>\n<p><b>U prvoj lekciji <\/b>razmotrit \u0107emo principe rada Ethereum blockchaina i osnovnu terminologiju, kao i re\u0107i gdje se ovaj blockchain mo\u017ee koristiti. <\/p>\n<p>Cilj <b>druga lekcija<\/b> \u2013 stvoriti \u010dvor privatnog Ethereum blockchaina za daljnji rad u okviru ovog te\u010daja na Ubuntu i Debian poslu\u017eitelju. Razmotrit \u0107emo osobitosti instalacije osnovnih alata, poput geth-a, koji osigurava rad \u010dvora na\u0161eg blockchaina, kao i demona decentraliziranog skladi\u0161ta podataka swarm.<\/p>\n<p><b>Tre\u0107a lekcija<\/b> nau\u010dit \u0107e vas kako provoditi eksperimente s Ethereumom na pristupa\u010dnom mikrora\u010dunalu Raspberry Pi. Instalirat \u0107ete operacijski sustav (OS) Rasberian na Raspberry Pi, alat Geth koji omogu\u0107ava rad blockchain \u010dvora, kao i daemon za decentralizirano pohranjivanje podataka Swarm.<\/p>\n<p><b>\u010cetvrta lekcija<\/b> posve\u0107ena je ra\u010dunima i jedinicama kriptovaluta u mre\u017ei Ethereum, kao i na\u010dinima prijenosa sredstava s jednog ra\u010duna na drugi pomo\u0107u Geth konzole. Nau\u010dit \u0107ete kako kreirati ra\u010dune, inicirati transakcije prijenosa sredstava, dobiti stanje transakcije i njezin potvrdu.<\/p>\n<p><b>Na petoj lekciji<\/b> upoznat \u0107ete se sa pametnim ugovorima u mre\u017ei Ethereum i nau\u010dit \u0107ete o njihovom izvr\u0161avanju putem Ethereum virtualne ma\u0161ine. <\/p>\n<p>Stvorit \u0107ete i objaviti u privatnoj mre\u017ei Ethereum svoj prvi pametan ugovor i nau\u010dit \u0107ete kako pozivati njegove funkcije. Za to \u0107ete koristiti razvojno okru\u017eenje Remix Solidity IDE. Osim toga, nau\u010dit \u0107ete instalirati i koristiti paketni kompajler solc.<br \/>\nTako\u0111er \u0107emo objasniti takozvani binarni su\u010delje aplikacije Application Binary Interface (ABI) i podu\u010diti vas kako ga koristiti.<\/p>\n<p><b>\u0160esta lekcija<\/b> posve\u0107ena je stvaranju JavaScript skripti koje rade pod Node.js i izvr\u0161avaju operacije sa Solidity pametnim ugovorima.<\/p>\n<p>Instalirat \u0107ete Node.js na OS Ubuntu, Debian i Rasberian, napisati skripte za objavljivanje pametnog ugovora u lokalnoj mre\u017ei Ethereum i pozivati njegove funkcije. <\/p>\n<p>Osim toga, nau\u010dit \u0107ete kako prenositi sredstava izme\u0111u obi\u010dnih ra\u010duna pomo\u0107u skripti, kao i kako ih upla\u0107ivati na ra\u010dune pametnih ugovora.<\/p>\n<p><b>Na sedmoj lekciji<\/b> nau\u010dit \u0107ete kako instalirati i koristiti popularno razvojno okru\u017eenje Truffle me\u0111u programerima pametnih ugovora Solidity. Nau\u010dit \u0107ete kako stvarati JavaScript skripte koje pozivaju funkcije ugovora pomo\u0107u truffle-contract modula, a tako\u0111er \u0107ete testirati svoj pametni ugovor pomo\u0107u Truffle.<\/p>\n<p><b>Osma lekcija<\/b> posve\u0107ena je tipovima podataka u Solidity. Napisat \u0107ete pametne ugovore koji rade s tipovima podataka kao \u0161to su potpuni i nepuni cijeli brojevi, brojevi s pomi\u010dnim zarezom, stringovi, adrese, varijable slo\u017eenih tipova, nizovi, enumeracije, strukture i rje\u010dnici.<\/p>\n<p><b>Na devetoj lekciji<\/b> Pribli\u017eavate se jo\u0161 koraku do stvaranja pametnih ugovora za glavnu mre\u017eu Ethereum. Nau\u010dit \u0107ete kako objaviti ugovore pomo\u0107u Truffle na privatnoj mre\u017ei Geth, kao i na testnoj mre\u017ei Rinkeby. Debugging pametnog ugovora na mre\u017ei Rinkeby je vrlo koristan prije nego \u0161to ga objavite na glavnoj mre\u017ei \u2014 gotovo sve je stvarno, ali besplatno.<\/p>\n<p>U okviru lekcije stvorit \u0107ete \u010dvor testne mre\u017ee Rinkeby, dopunit \u0107ete ga sredstvima i objaviti pametni ugovor.<\/p>\n<p><b>Lekcija 10<\/b> posve\u0107ena je distribuiranim skladi\u0161tima podataka Ethereum Swarm. Kori\u0161tenjem distribuiranih skladi\u0161ta \u0161tedite na pohrani velikih koli\u010dina podataka u blockchainu Ethereum. <\/p>\n<p>U ovoj lekciji stvorit \u0107ete lokalno skladi\u0161te Swarm, izvr\u0161it \u0107ete operacije pisanja i \u010ditanja datoteka, kao i direktorija s datotekama. Sljede\u0107e \u0107ete nau\u010diti kako raditi s javnim gateway-em Swarm, napisati skripte za pristup Swarm iz Node.js, kao i pomo\u0107u Perl modula Net::Ethereum::Swarm.<\/p>\n<p><b>Cilj lekcije 11<\/b> je savladati rad sa pametnim ugovorima Solidity uz kori\u0161tenje popularnog programskog jezika Python i frameworka Web3.py. Instalirat \u0107ete ovaj framework, napisati skripte za kompilaciju i objavu pametnog ugovora, kao i za pozivanje njegovih funkcija. Pritom \u0107e Web3.py biti kori\u0161ten samostalno, kao i zajedno s integriranim razvojnim okru\u017eenjem Truffle.<\/p>\n<p><b>Na 12. lekciji<\/b> nau\u010dit \u0107ete kako prenositi podatke izme\u0111u pametnih ugovora i stvarnog svijeta pomo\u0107u oracle-a. To \u0107e vam biti korisno za dobivanje podataka s web stranica, ure\u0111aja interneta stvari (IoT), raznih instrumenata i senzora, i slanje podataka iz pametnih ugovora tim ure\u0111ajima. U prakti\u010dnom dijelu lekcije stvorit \u0107ete oracle i pametni ugovor koji dobiva aktualni te\u010daj USD u ruble s web stranice CBR.<\/p>\n<p><b class=\"spoiler_title\">Lekcija 1. Kratko o blockchainu i mre\u017ei Ethereum<\/b><b>Cilj lekcije:<\/b> upoznati se s principima rada blockchaina Ethereum, podru\u010djima njegove primjene i osnovnom terminologijom.<br \/>\n<b>Prakti\u010dne zada\u0107e:<\/b> u ovoj lekciji nisu predvi\u0111ene.<\/p>\n<p>Te\u0161ko je danas prona\u0107i softverskog developera koji nije \u010duo za tehnologiju blockchain, kriptovalute, bitcoine, inicijalnu ponudu kovanica (ICO), pametne ugovore, kao i druge pojmove i termine koji se odnose na blockchain.<\/p>\n<p>Tehnologija blockchaina otvara nova tr\u017ei\u0161ta i stvara radna mjesta za programere. Ako ovladate svim nijansama kriptovalutnih tehnologija i tehnologija pametnih ugovora, ne bi trebalo biti problema s primjenom tih znanja u praksi.<\/p>\n<p>Trebalo bi napomenuti da oko kriptovaluta i blockchaina ima mnogih spekulacija. Ostavit \u0107emo po strani rasprave o promjenama te\u010dajeva kriptovaluta, o stvaranju piramida, o nijansama kriptovalutne regulative itd. U na\u0161em te\u010daju fokusirat \u0107emo se prvenstveno na tehni\u010dke aspekte primjene pametnih ugovora blockchaina Ethereum (ethereum, ether) i razvoja takozvanih decentraliziranih aplikacija (Distributed Application, DApp).<\/p>\n<h3>\u0160to je blockchain<\/h3>\n<p>\nBlockchain (Blockchain, Block Chain) predstavlja lanac blokova podataka, povezanih jedan s drugim odre\u0111enim na\u010dinom. Na po\u010detku lanca nalazi se prvi blok, koji se naziva primarnim blokom (genesis block) ili blokom geneze. Iza njega slijedi drugi, pa tre\u0107i i tako dalje.<\/p>\n<p>Svi ti blokovi podataka automatski se dupliciraju na brojnim \u010dvorovima blockchain mre\u017ee. Tako se osigurava decentralizirano pohranjivanje podataka blockchaina. <br \/>\nMo\u017eete zamisliti sustav blockchaina kao veliki broj \u010dvorova (fizi\u010dkih ili virtualnih poslu\u017eitelja), povezanih u mre\u017eu i repliciraju\u0107ih sve promjene u lancu blokova podataka. To je poput golemog multi-poslu\u017eiteljskog ra\u010dunala, pri \u010demu se \u010dvorovi tog ra\u010dunala (poslu\u017eitelji) mogu nalaziti \u0161irom svijeta. A i vi mo\u017eete dodati svoj ra\u010dunar u mre\u017eu blockchaina. <\/p>\n<h4>Distribuirana baza podataka<\/h4>\n<p>\nBlockchain se mo\u017ee zamisliti kao distribuirana baza podataka, replicirana na sve \u010dvorove blockchain mre\u017ee. U teoriji, blockchain \u0107e raditi sve dok postoji barem jedan \u010dvor koji pohranjuje sve blokove blockchaina.<\/p>\n<h4>Distribuirana knjiga podataka<\/h4>\n<p>\nBlockchain se mo\u017ee zamisliti kao ova distribuirana knjiga podataka i operacija (transakcija). Jo\u0161 jedno ime za ovu knjigu je glavna knjiga. <\/p>\n<p>U distribuiranom registru mogu\u0107e je dodavati podatke, ali ih nije mogu\u0107e mijenjati ili brisati. Ova nemogu\u0107nost se posti\u017ee, izme\u0111u ostalog, primjenom kriptografskih algoritama, posebnih algoritama za dodavanje blokova u lanac i decentraliziranim pohranom podataka.<\/p>\n<p>Prilikom dodavanja blokova i obavljanja operacija (transakcija) koriste se privatni i javni klju\u010devi. Oni ograni\u010davaju korisnike blockchaina, pru\u017eaju\u0107i im pristup samo njihovim blokovima podataka.<\/p>\n<h4>Transakcije<\/h4>\n<p>\nBlockchain pohranjuje informacije o operacijama (transakcijama) unutar blokova. Pri tome, stare, ve\u0107 izvr\u0161ene transakcije nije mogu\u0107e vratiti ili izmijeniti. Nove transakcije se pohranjuju u nove, dodane blokove.<\/p>\n<p>Tako u blockchainu mo\u017ee biti zabilje\u017eena u nepromijenjenom obliku cijela povijest transakcija. Zbog toga se blockchain mo\u017ee koristiti, na primjer, za sigurno pohranjivanje bankovnih operacija, informacija o autorskim pravima, povijest promjena vlasnika nekretnina itd.<\/p>\n<p>Ethereum blockchain sadr\u017ei takozvane stanje sistema. Kako se transakcije izvr\u0161avaju, stanje se mijenja od po\u010detnog do trenutnog. Transakcije se zapisuju u blokove.<\/p>\n<h4>Javni i privatni blockchaini<\/h4>\n<p>\nOvdje treba napomenuti da sve re\u010deno vrijedi samo za tzv. javne blockchain mre\u017ee, koje ne mogu biti kontrolirane od strane bilo kojih pojedina\u010dnih fizi\u010dkih ili pravnih osoba, dr\u017eavnih tijela ili vlada. <br \/>\nTzv. privatne blockchain mre\u017ee su pod potpunom kontrolom njihovih kreatora, i sve je mogu\u0107e, na primjer, potpuno zamijeniti sve blokove lanaca.<\/p>\n<h4>Prakti\u010dne primjene blockchaina<\/h4>\n<p>\nZa \u0161to mo\u017ee poslu\u017eiti blockchain?<\/p>\n<p>Ukratko, blockchain omogu\u0107ava sigurno provo\u0111enje operacija (transakcija) izme\u0111u osoba ili kompanija koje si ne vjeruju. Podaci zapisani u blockchainu (transakcije, osobni podaci, dokumenti, svjedo\u010danstva, ugovori, otpremnice itd.) nije mogu\u0107e falsificirati ili zamijeniti nakon snimanja. Zbog toga se na temelju blockchaina mogu stvarati, na primjer, pouzdani distribuirani registri raznih vrsta dokumenata.<\/p>\n<p>Naravno, znate da se na temelju blockchaina stvaraju kriptovalutni sustavi, \u010dija je svrha zamijeniti obi\u010dne papirnate nov\u010danice. Papirnate nov\u010danice se tako\u0111er nazivaju fiat (od Fiat Money).<br \/>\nBlockchain osigurava pohranu i nepromjenjivost transakcija zabilje\u017eenih u blokovima, pa se mo\u017ee koristiti za stvaranje kriptovalutnih sustava. Sadr\u017ei cijelu povijest prijenosa kripto-sredstava izme\u0111u razli\u010ditih korisnika (ra\u010duna), pri \u010demu se bilo koja operacija mo\u017ee pratiti.<\/p>\n<p>Iako operacije unutar kriptovalutnih sustava mogu biti anonimne, isplata kriptovalute i njezina zamjena za fiat novac obi\u010dno dovode do otkrivanja identiteta vlasnika kriptovalutnog sredstva. <\/p>\n<p>Takozvani pametni ugovori, koji predstavljaju softver koji radi na mre\u017ei Ethereum, omogu\u0107uju automatizaciju procesa sklapanja ugovora i kontrolu njihove provedbe. To je posebno u\u010dinkovito kada se pla\u0107anje po ugovoru vr\u0161i kriptovalutom Ether (ether).<\/p>\n<p>Ethereum blockchain i Ethereum pametni ugovori napisani na programskom jeziku Solidity mogu se koristiti, na primjer, u sljede\u0107im podru\u010djima:<\/p>\n<ul>\n<li>alternativa notarskom ovjerenju dokumenata;<\/li>\n<li>pohrana registra nekretnina i podaci o transakcijama s nekretninama;<\/li>\n<li>pohrana podataka o autorskim pravima na intelektualno vlasni\u0161tvo (knjige, slike, glazbena djela itd.);<\/li>\n<li>izrada sustava neovisnog glasovanja;<\/li>\n<li>podru\u010dje financija i bankarstva;<\/li>\n<li>logistika na me\u0111unarodnoj razini, pra\u0107enje premje\u0161tanja tereta;<\/li>\n<li>pohrana osobnih podataka kao analog sustava identifikacijskih dokumenata;<\/li>\n<li>sigurne transakcije u poslovnom sektoru;<\/li>\n<li>pohrana rezultata medicinskih pregleda, kao i povijesti propisanih postupaka<\/li>\n<\/ul>\n<p><\/p>\n<h4>Problemi s blockchainom<\/h4>\n<p>\nAli, naravno, nije sve tako jednostavno kao \u0161to se mo\u017ee \u010diniti! <\/p>\n<p>Postoje problemi s verificiranjem podataka prije njihove dodavanja u blockchain (npr. jesu li la\u017eni?), problemi sa sigurno\u0161\u0107u sustavnog i aplikativnog softvera koji se koristi za rad s blockchainom, problemi s mogu\u0107no\u0161\u0107u kori\u0161tenja metoda socijalnog in\u017eenjeringa za kra\u0111u pristupa nov\u010danicima s kriptovalutom itd.<\/p>\n<p>Opet, ako se ne radi o javnom blockchainu \u010diji su \u010dvorovi raspr\u0161eni \u0161irom sveta, ve\u0107 o privatnom blockchainu koji pripada osobi ili organizaciji, nivo poverenja ovde ne\u0107e biti ve\u0107i od nivoa poverenja prema toj osobi ili organizaciji.<\/p>\n<p>Tako\u0111e treba imati na umu da podaci zapisani u blockchainu postaju dostupni svima. U tom smislu, blockchain (posebno javni) nije pogodan za \u010duvanje poverljivih informacija. Me\u0111utim, \u010dinjenica da se informacije u blockchainu ne mogu menjati mo\u017ee pomo\u0107i u spre\u010davanju ili istra\u017eivanju raznih vrsta prevara.<\/p>\n<p>Decentralizovane aplikacije na Ethereum-u bi\u0107e korisnije ukoliko se za njihovo kori\u0161\u0107enje pla\u0107a kriptovalutom. \u0160to vi\u0161e ljudi poseduje kriptovalutu ili je spremno da je kupi, to \u0107e DApp i pametni ugovori dobiti ve\u0107u popularnost.<\/p>\n<p>Me\u0111u op\u0161tim problemima blockchain-a koji ote\u017eavaju njegovu prakti\u010dnu primenu mogu se pomenuti ograni\u010dena brzina dodavanja novih blokova i relativno visoki tro\u0161kovi transakcija. No, tehnologije u ovoj oblasti se aktivno razvijaju i postoje nade da \u0107e se tehni\u010dki problemi s vremenom re\u0161iti.<\/p>\n<p>Jo\u0161 jedan problem je taj \u0161to pametni ugovori na Ethereum blockchainu rade u izolovanom okru\u017eenju virtuelnih ma\u0161ina i nemaju pristup podacima iz stvarnog sveta. Naime, program pametnog ugovora ne mo\u017ee sam pro\u010ditati podatke sa veb sajtova ili bilo kojih fizi\u010dkih ure\u0111aja (senzori, kontakti itd.), niti mo\u017ee poslati podatke na bilo koje spoljne ure\u0111aje. Ovaj problem i na\u010dine njegovog re\u0161enja \u0107emo raspraviti na \u010dasu posve\u0107enom takozvanim Oracle-ima \u2014 informativnim posrednicima pametnih ugovora.<\/p>\n<p>Tako\u0111e postoje ograni\u010denja u oblasti zakonodavstva. U nekim zemljama, na primer, zabranjuje se kori\u0161\u0107enje kriptovalute kao sredstva pla\u0107anja, ali se mo\u017ee posedovati kao neki digitalni asset, sli\u010dno vrednosnim papirima. Takvi assets se mogu kupovati i prodavati na berzi. U svakom slu\u010daju, prilikom kreiranja projekta koji radi sa kriptovalutama, potrebno je upoznati se sa zakonodavstvom zemlje \u010dija jurisdikcija pokriva va\u0161 projekat.<\/p>\n<h3>Kako se formira lanac blokova<\/h3>\n<p>\nKao \u0161to smo ve\u0107 spomenuli, blok-lanac predstavlja jednostavni niz blokova podataka. Prvo se formira prvi blok ovog niza, zatim mu se pridru\u017euje drugi i tako dalje. Pretpostavlja se da se podaci transakcija \u010duvaju u blokovima i dodaju u posljednji blok.<\/p>\n<p>Na slici 1.1 prikazali smo najjednostavniju verziju sekvencijalnih blokova, gdje se prvi blok odnosi na sljede\u0107i. <\/p>\n<p><img decoding=\"async\" alt=\"Knjiga &quot;Izrada pametnih ugovora Solidity za blockchain Ethereum. Prakti\u010dni vodi\u010d&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/23ca04ba2c8914334032523d01bf8b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Slika 1.1. Jednostavna sekvenca blokova<\/i><\/p>\n<p>U toj varijanti, me\u0111utim, vrlo je lako falsificirati sadr\u017eaj bilo kojeg bloka lanca, budu\u0107i da blokovi ne sadr\u017ee nikakve informacije za za\u0161titu od promjena. S obzirom na to da je blok-lanac namijenjen kori\u0161tenju ljudi i kompanija izme\u0111u kojih nema povjerenja, mo\u017ee se zaklju\u010diti da takav na\u010din \u010duvanja podataka nije prikladan za blok-lanac.<\/p>\n<p>Pozabavimo se za\u0161titom blokova od falsifikacije. U prvoj fazi poku\u0161at \u0107emo za\u0161tititi svaki blok kontrolnom sumom (slika 1.2).<\/p>\n<p><img decoding=\"async\" alt=\"Knjiga &quot;Izrada pametnih ugovora Solidity za blockchain Ethereum. Prakti\u010dni vodi\u010d&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/141502accec14e868a9382c612cfc791.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Slika 1.2. Dodavanje za\u0161tite podacima blokova kontrolnom sumom<\/i><\/p>\n<p>Sada zlonamjernik ne mo\u017ee jednostavno promijeniti blok, jer u njemu postoji kontrolna suma podataka bloka. Provjera kontrolne sume pokazat \u0107e da su podaci promijenjeni.<\/p>\n<p>Za izra\u010dun kontrolne sume mo\u017ee se koristiti jedna od funkcija hashiranja, poput MD-5, SHA-1, SHA-256 itd. Hash funkcije izra\u010dunavaju neku vrijednost (na primjer, u obliku tekstualnog niza fiksne duljine) kao rezultat izvo\u0111enja nepovratnih operacija nad blokom podataka. Operacije ovise o vrsti hash funkcije. <\/p>\n<p>\u010cak i uz malu promjenu sadr\u017eaja bloka podataka, vrijednost hash funkcije \u0107e se tako\u0111er promijeniti. Analiziraju\u0107i vrijednost hash funkcije, nemogu\u0107e je rekonstruirati blok podataka za koji je izra\u010dunata.<\/p>\n<p>Ho\u0107e li takva za\u0161tita biti dovoljna? Na\u017ealost, ne\u0107e.<\/p>\n<p>U ovoj shemi kontrolna suma (hash funkcija) \u0161titi samo pojedina\u010dne blokove, ali ne cijeli lanac blokova. Poznavaju\u0107i algoritam izra\u010dunavanja hash funkcije, zlonamjernik mo\u017ee lako promijeniti sadr\u017eaj bloka. Tako\u0111er, ni\u0161ta ne sprje\u010dava da izbaci blokove iz lanca ili doda nove.<\/p>\n<p>Kako bismo za\u0161titili cijeli lanac u cjelini, mo\u017eemo pohraniti u svakom bloku zajedno s podacima i hash podataka prethodnog bloka (slika 1.3).<\/p>\n<p><img decoding=\"async\" alt=\"Knjiga &quot;Izrada pametnih ugovora Solidity za blockchain Ethereum. Prakti\u010dni vodi\u010d&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/f414ab67dbabc763c537a430e01ed065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Slika 1.3. Dodavanje hash-a prethodnog bloka u blok podataka<\/i><\/p>\n<p>Da bi se u ovoj shemi izmijenio neki blok, potrebno je prera\u010dunati hash funkcije svih sljede\u0107ih blokova. \u010cinilo bi se, koji je problem?<\/p>\n<p>U stvarnim blockchain-ima dodatno su stvorene umjetne pote\u0161ko\u0107e za dodavanje novih blokova \u2014 koriste se algoritmi koji zahtijevaju mnogo ra\u010dunalnih resursa. S obzirom na to da je za promjene u bloku potrebno prera\u010dunati ne samo taj blok, ve\u0107 i sve sljede\u0107e, vrlo \u0107e biti te\u0161ko to u\u010diniti.<\/p>\n<p>Tako\u0111er se sjetimo da se podaci blockchaina pohranjuju (dupliciraju) na brojnim \u010dvorovima mre\u017ee, tj. koristi se decentralizirana pohrana. To vi\u0161estruko ote\u017eava krivotvorenje bloka, jer zahtijeva da se izmjene unesu na sve \u010dvorove mre\u017ee.<\/p>\n<p>Budu\u0107i da blokovi pohranjuju informacije o prethodnom bloku, mogu\u0107e je provjeriti sadr\u017eaj svih blokova lanaca.<\/p>\n<h3>Ethereum blockchain<\/h3>\n<p>\nEthereum blockchain predstavlja platformu na kojoj se mogu stvarati distribuirane aplikacije DApp. Za razliku od drugih platformi, Ethereum omogu\u0107ava kori\u0161tenje tzv. pametnih ugovora (smart contracts) napisanih u programskom jeziku Solidity.<\/p>\n<p>Ova platforma je stvorena 2013. godine od strane Vitalika Buterina, osniva\u010da \u010dasopisa Bitcoin Magazine, i pokrenuta 2015. godine. Sve \u0161to \u0107emo prou\u010davati ili raditi u na\u0161em obrazovnom te\u010daju odnosi se upravo na Ethereum blockchain i Solidity pametne ugovore.<\/p>\n<h3>Rudarenje ili kako se stvaraju blokovi<\/h3>\n<p>\nRudarenje (mining) predstavlja prili\u010dno slo\u017een i resursno intenzivan proces dodavanja novih blokova u lanac blockchaina, a ne \"ekstrakciju kriptovaluta\". Rudarenje osigurava funkcionalnost blockchaina, jer je upravo ovaj proces odgovoran za dodavanje transakcija u Ethereum blockchain.<\/p>\n<p>Ljudi i organizacije koji se bave dodavanjem blokova nazivaju se rudarima (miners).<br \/>\nSoftver (SO) koji radi na \u010dvorovima rudara poku\u0161ava prona\u0107i za posljednji blok parametar hashiranja nazvan Nonce, kako bi se dobila odre\u0111ena vrijednost hash funkcije koju je odredila mre\u017ea. Hash algoritam Ethash, primijenjen u Ethereum-u, omogu\u0107uje dobivanje vrijednosti Nonce samo putem sekvencijalnog pretra\u017eivanja. <\/p>\n<p>Ako je \u010dvor rudara prona\u0161ao ispravnu vrijednost Nonce, to se naziva dokazom rada (PoW, Proof-of-work). U tom slu\u010daju, ako se blok doda u Ethereum mre\u017eu, rudar dobiva odre\u0111enu nagradu u valuti mre\u017ee \u2014 Ether. U trenutku pripreme na\u0161e knjige nagrada iznosi 5 Ether, no s vremenom \u0107e se smanjivati.<\/p>\n<p>Tako rudari Ethereuma osiguravaju rad mre\u017ee dodavanjem blokova i za to dobivaju kripto novac. Na internetu \u0107ete prona\u0107i obilje informacija o rudarima i rudarenju, a mi \u0107emo se usredoto\u010diti na stvaranje Solidity ugovora i decentraliziranih aplikacija DApp u Ethereum mre\u017ei.<\/p>\n<h3>Zaklju\u010dci lekcije<\/h3>\n<p>\nNa prvoj lekciji ste se upoznali s blockchainom i saznali da se radi o posebno sastavljenoj sekvenci blokova. Sadr\u017eaj ranije zabilje\u017eenih blokova nije mogu\u0107e promijeniti, jer bi u tom slu\u010daju bilo potrebno ponovo izra\u010dunati sve sljede\u0107e blokove na mnogim \u010dvorovima mre\u017ee, \u0161to bi zahtijevalo velike resurse i vrijeme.<\/p>\n<p>Blockchain se mo\u017ee koristiti za pohranu rezultata izvr\u0161enja transakcija. Njegovo glavno namijenjenje je organizacija sigurnog izvr\u0161enja transakcija izme\u0111u strana (osoba i organizacija) izme\u0111u kojih nema povjerenja. Saznali ste u kojim se konkrentim poslovnim oblastima i sektorima mo\u017ee koristiti Ethereum blockchain i Solidity pametni ugovori. To su bankovni sektor, registracija vlasni\u010dkih prava, dokumenata itd.<\/p>\n<p>Tako\u0111er ste saznali da se prilikom kori\u0161tenja blockchaina mogu pojaviti razni problemi. To su problemi verifikacije informacija koje se dodaju u blockchain, brzina rada blockchaina, tro\u0161kovi transakcija, problem razmjene podataka izme\u0111u pametnih ugovora i stvarnog svijeta, kao i potencijalni napadi zlonamjernih korisnika usmjereni na kra\u0111u kripto sredstava s korisni\u010dkih ra\u010duna.<\/p>\n<p>Tako\u0111er smo ukratko pri\u010dali o rudarenju kao procesu dodavanja novih blokova u blockchain. Rudarenje je potrebno za izvr\u0161enje transakcija. Oni koji se bave rudarenjem osiguravaju funkcionalnost blockchaina i za to dobivaju nagradu u kriptovaluti.<\/p>\n<p><b class=\"spoiler_title\">Lekcija 2. Priprema radnog okru\u017eenja u OS-u Ubuntu i Debian<\/b>Odabir operativnog sustava<br \/>\nInstalacija potrebnih alata<br \/>\nInstalacija Getha i Swarma u Ubuntu<br \/>\nInstalacija Getha i Swarma u Debian<br \/>\nPripremne radnje<br \/>\nPreuzimanje Go distribucije<br \/>\nPode\u0161avanje varijabli okru\u017eenja<br \/>\nProvjera verzije Go<br \/>\nInstalacija Geth-a i Swarm-a<br \/>\nKreiramo privatni blockchain<br \/>\n\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0430\u0439\u043b genesis.json<br \/>\nKreiramo direktorij za rad<br \/>\nKreiramo ra\u010dun<br \/>\nPokre\u0107emo inicijalizaciju \u010dvora<br \/>\nParametri pokretanja \u010dvora<br \/>\nPovezujemo se na na\u0161 \u010dvor<br \/>\nUpravljanje rudarstvom i provjera stanja<br \/>\nZatvaranje Geth konzole<br \/>\nZaklju\u010dci lekcije<\/p>\n<p><b class=\"spoiler_title\">Lekcija 3. Priprema radnog okru\u017eenja na Raspberry Pi 3<\/b>Priprema Raspberry Pi 3 za rad<br \/>\nInstalacija Rasberiana<br \/>\nInstalacija a\u017euriranja<br \/>\nOmogu\u0107avanje SSH pristupa<br \/>\nPostavljanje stati\u010dne IP adrese<br \/>\nInstalacija potrebnih alata<br \/>\nInstalacija Go<br \/>\nPreuzimanje Go distribucije<br \/>\nPode\u0161avanje varijabli okru\u017eenja<br \/>\nProvjera verzije Go<br \/>\nInstalacija Geth-a i Swarm-a<br \/>\nKreiramo privatni blockchain<br \/>\nProvjera ra\u010duna i stanja<br \/>\nZaklju\u010dci lekcije<\/p>\n<p><b class=\"spoiler_title\">Lekcija 4. Ra\u010duni i prijenos sredstava izme\u0111u ra\u010duna<\/b>Pregled i dodavanje ra\u010duna<br \/>\nPregled liste ra\u010duna<br \/>\nDodavanje ra\u010duna<br \/>\nParametri komande geth account<br \/>\nLozinke ra\u010duna<br \/>\nKriptovaluta u Ethereum-u<br \/>\nNov\u010dane jedinice Ethereum-a<br \/>\nOdre\u0111ivanje trenutnog stanja na\u0161ih ra\u010duna<br \/>\nPrijenos sredstava s jednog ra\u010duna na drugi<br \/>\nMetoda eth.sendTransaction<br \/>\nPregled statusa transakcije<br \/>\nPotvrda transakcije<br \/>\nZaklju\u010dci lekcije<\/p>\n<p><b class=\"spoiler_title\">Lekcija 5. Objavljivanje prvog ugovora<\/b>Pametni ugovori u Ethereum-u<br \/>\nIzvr\u0161avanje pametnog ugovora<br \/>\nVirtualna ma\u0161ina Ethereum<br \/>\nIntegrirano razvojno okru\u017eenje Remix Solidity IDE<br \/>\nPokretanje kompilacije<br \/>\nPoziv funkcija ugovora<br \/>\nObjavljivanje ugovora u privatnoj mre\u017ei<br \/>\nDobivanje definicije ABI i binarnog koda ugovora<br \/>\nObjavljivanje ugovora<br \/>\nProvjera statusa transakcije objave ugovora<br \/>\nPoziv funkcija ugovora<br \/>\nPakirani kompilator solc<br \/>\nInstalacija solc u Ubuntu-u<br \/>\nInstalacija solc u Debian-u<br \/>\nKompilacija ugovora HelloSol<br \/>\nObjavljivanje ugovora<br \/>\nInstalacija solc na Rasberian-u<br \/>\nZaklju\u010dci lekcije<\/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 \/>\nInstalacija u Ubuntu-u<br \/>\nInstalacija u Debian-u<br \/>\nInstalacija i pokretanje Ganache-cli<br \/>\nInstalacija Web3<br \/>\nInstalacija solc<br \/>\nInstalacija Node.js na Rasberian-u<br \/>\nSkripta za dobivanje liste ra\u010duna u konzoli<br \/>\nSkripta za objavljivanje pametnog ugovora<br \/>\nPokretanje i dobivanje parametara<br \/>\nDobivanje parametara pokretanja<br \/>\nKompilacija ugovora<br \/>\nOtklju\u010davanje ra\u010duna<br \/>\nPreuzimanje ABI i binarnog koda ugovora<br \/>\nProcjena potrebne koli\u010dine plina<br \/>\nKreiranje objekta i pokretanje objave ugovora<br \/>\nPokretanje skripte za objavu ugovora<br \/>\nPoziv funkcija pametnog ugovora<br \/>\nDa li je mogu\u0107e a\u017eurirati objavljeni pametni ugovor<br \/>\nRad s Web3 verzijom 1.0.x<br \/>\nDobivanje liste ra\u010duna<br \/>\nObjavljivanje ugovora<br \/>\nPoziv funkcija ugovora<br \/>\nPrijenos sredstava s jednog ra\u010duna na drugi<br \/>\nPrijenos sredstava na ra\u010dun ugovora<br \/>\nA\u017euriranje pametnog ugovora HelloSol<br \/>\nKreiranje skripte za pregled stanja ra\u010duna<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 \/>\nPunjenje ra\u010duna pametnog ugovora<br \/>\nZaklju\u010dci lekcije<\/p>\n<p><b class=\"spoiler_title\">Lekcija 7. Uvod u Truffle<\/b>Instalacija Truffle-a<br \/>\nKreiranje projekta HelloSol<br \/>\nKreiranje direktorija i datoteka projekta<br \/>\nDirektorij contracts<br \/>\nKatalog migracija<br \/>\nKatalog test<br \/>\n\u0424\u0430\u0439\u043b truffle-config.js<br \/>\nKompilacija ugovora HelloSol<br \/>\nPokretanje objave ugovora<br \/>\nPozivanje funkcija ugovora HelloSol u Truffle pozivu<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 \/>\nInstalacija modula truffle-contract<br \/>\nPozivanje funkcija ugovora getValue i getString<br \/>\nPozivanje funkcija ugovora setValue i setString<br \/>\nIzmjena ugovora i ponovna objava<br \/>\nRad s Web3 verzijom 1.0.x<br \/>\nVr\u0161enje izmjena u pametnom ugovoru HelloSol<br \/>\nSkripte za pozivanje metoda ugovora<br \/>\nTestiranje u Truffle<br \/>\nTestiranje na Solidity<br \/>\nTestiranje na JavaScript<br \/>\nZaklju\u010dci lekcije<\/p>\n<p><b class=\"spoiler_title\">Lekcija 8. Tipovi podataka Solidity<\/b>Ugovor za u\u010denje tipova podataka<br \/>\nLogi\u010dki tipovi podataka<br \/>\nNesigned i signed cijeli brojevi<br \/>\nFiksno decimalni brojevi<br \/>\nAdresa<br \/>\nPromjenljive slo\u017eenih tipova<br \/>\nFiksno veli\u010dine nizovi<br \/>\nDinami\u010dki nizovi<br \/>\nPopis<br \/>\nStrukture<br \/>\nMappinzi<br \/>\nZaklju\u010dci lekcije<\/p>\n<p><b class=\"spoiler_title\">Lekcija 9. Migracija ugovora u privatnu mre\u017eu i Rinkeby mre\u017eu<\/b>Objavljivanje ugovora iz Truffle u privatnu Geth mre\u017eu<br \/>\nPriprema \u010dvora privatne mre\u017ee<br \/>\nPriprema ugovora za rad<br \/>\nKompilacija i migracija ugovora u Truffle mre\u017eu<br \/>\nPokretanje migracije u lokalnu geth mre\u017eu<br \/>\nSkupljanje Truffle artefakata<br \/>\nObjavljivanje ugovora iz Truffle u testnoj Rinkeby mre\u017ei<br \/>\nPriprema Geth \u010dvora za rad s Rinkeby<br \/>\nSinhronizacija \u010dvora<br \/>\nDodavanje ra\u010duna<br \/>\nPuno\u0107u Rinkeby ra\u010duna eterom<br \/>\nPokretanje migracije ugovora u Rinkeby mre\u017eu<br \/>\nPregled informacija o ugovoru u Rinkeby mre\u017ei<br \/>\nTruffle konzola za Rinkeby mre\u017eu<br \/>\nJednostavniji na\u010din pozivanja funkcija ugovora<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 \/>\nPrenos sredstava izme\u0111u ra\u010duna u Truffle konzoli za Rinkeby<br \/>\nZaklju\u010dci lekcije<\/p>\n<p><b class=\"spoiler_title\">Lekcija 10. Decentralizovano skladi\u0161te podataka Ethereum Swarm<\/b>Kako radi Ethereum Swarm<br \/>\nInstalacija i pokretanje Swarm<br \/>\nOperacije s datotekama i katalogima<br \/>\nU\u010ditavanje datoteke u Ethereum Swarm<br \/>\n\u010citanje datoteke iz Ethereum Swarm<br \/>\nPregled manifestacije u\u010ditane datoteke<br \/>\nU\u010ditavanje katalog\u00e2 s podkatalog\u00e2<br \/>\n\u010citanje datoteke iz u\u010ditanog kataloga<br \/>\nKori\u0161\u0107enje javnog pristupnika Swarm<br \/>\n\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a Swarm \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 Node.js<br \/>\nPerl modul Net::Ethereum::Swarm<br \/>\nInstalacija modula Net::Ethereum::Swarm<br \/>\nPisanje i \u010ditanje podataka<br \/>\nZaklju\u010dci lekcije<\/p>\n<p><b class=\"spoiler_title\">Lekcija 11. Web3.py okvir za rad s Ethereum na Pythonu<\/b>Instalacija Web3.py<br \/>\nA\u017euriranje i instalacija potrebnih paketa<br \/>\nInstalacija modula easysolc<br \/>\nObjavljivanje ugovora putem Web3.py<br \/>\nKompilacija ugovora<br \/>\nPovezivanje s provajderom<br \/>\nIzvr\u0161enje objave ugovora<br \/>\nSpremanje adrese ugovora i ABI u datoteci<br \/>\nPokretanje skripte za objavu ugovora<br \/>\nPozivanje metoda ugovora<br \/>\n\u010citanje adrese i ABI ugovora iz JSON datoteke<br \/>\nPovezivanje s provajderom<br \/>\nKreiranje objekta ugovora<br \/>\nPozivanje metoda ugovora<br \/>\nTruffle i Web3.py<br \/>\nZaklju\u010dci lekcije<\/p>\n<p><b class=\"spoiler_title\">Lekcija 12. Orakuli<\/b>Mo\u017ee li pametni ugovor vjerovati podacima iz vanjskog svijeta<br \/>\nOrakuli kao informativni posrednici blockchaina<br \/>\nIzvor podataka<br \/>\nKod za prikaz podataka iz izvora<br \/>\nOracle za zapisivanje te\u010daja u blockchain<br \/>\nUgovor USDRateOracle<br \/>\nA\u017euriranje te\u010daja u pametnom ugovoru<br \/>\nKori\u0161tenje Web Socket davatelja<br \/>\n\u010cekanje na doga\u0111aj RateUpdate<br \/>\nObrada doga\u0111aja RateUpdate<br \/>\nIniciranje a\u017euriranja podataka u pametnom ugovoru<br \/>\nZaklju\u010dci lekcije<\/p>\n<p>Izvor: <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.4 - 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\/hr\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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\udd47Knjiga \u201eKreiranje pametnih ugovora Solidity za Ethereum blockchain. Prakti\u010dni vodi\u010d\u201d | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/39018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=39018"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/39018\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/29275"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=39018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=39018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=39018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}