{"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\/nl\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","title":{"rendered":"Boek \u00abSmart Contracts Solidity maken voor de Ethereum-blockchain. Praktische handleiding\u00bb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Boek \u00abSmart Contracts Solidity maken voor de Ethereum-blockchain. Praktische handleiding\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/9549e708e99fef6892045ff854231fa7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nMeer dan een jaar heb ik gewerkt aan het boek 'Smart Contracts Solidity voor de Ethereum Blockchain. Praktische Gids', en nu is dit project voltooid, en het boek <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">is gepubliceerd en beschikbaar op Litres<\/a><\/noindex>.<\/p>\n<p>Ik hoop dat mijn boek helpt om snel aan de slag te gaan met het cre\u00ebren van smart contracts in Solidity en gedistribueerde applicaties (DApp) voor de Ethereum blockchain. Het bestaat uit 12 lessen met praktische opdrachten. Door deze uit te voeren, kan de lezer zijn eigen lokale Ethereum-nodes opzetten, smart contracts publiceren en hun methoden aanroepen, gegevens uit de echte wereld communiceren met smart contracts via orakels, en werken met het testnetwerk Rinkeby. <\/p>\n<p>Het boek is gericht aan iedereen die ge\u00efnteresseerd is in baanbrekende technologie\u00ebn op het gebied van blockchains en snel kennis wil opdoen om interessante en veelbelovende werkzaamheden uit te voeren.<\/p>\n<p>Hieronder vindt u de inhoudsopgave en het eerste hoofdstuk van het boek (ook op <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">Litres<\/a><\/noindex> beschikbaar zijn fragmenten van het boek). Ik hoop op feedback, opmerkingen en suggesties. Al deze input zal ik trachten mee te nemen in de voorbereiding van de volgende editie van het boek.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Inhoudsopgave<\/b><b class=\"spoiler_title\">Inleiding<\/b>Ons boek is bedoeld voor degenen die niet alleen de principes van de werking van de Ethereum blockchain willen begrijpen, maar ook praktische vaardigheden willen opdoen in het ontwikkelen van gedistribueerde applicaties (DApp) in de programmeertaal Solidity voor dit netwerk.<\/p>\n<p>Dit boek kun je beter niet alleen lezen, maar ermee werken door de praktische opdrachten in de lessen uit te voeren. Voor deze opdrachten heb je een lokale computer, virtuele of cloudserver nodig met een ge\u00efnstalleerd besturingssysteem Debian of Ubuntu. Ook voor veel opdrachten kan een Raspberry Pi worden gebruikt.<\/p>\n<p><b>In de eerste les <\/b>zullen we de principes van de werking van de Ethereum blockchain en de belangrijkste terminologie bespreken, evenals waar deze blockchain kan worden gebruikt. <\/p>\n<p>Doel <b>In de tweede les<\/b> gaan we een node van een private Ethereum blockchain cre\u00ebren voor verdere werkzaamheden in deze cursus op een Ubuntu- of Debian-server. We zullen de specifieke installatie van belangrijke tools, zoals geth, die onze blockchain-node operationeel maakt, en de daemon van de gedecentraliseerde datakluis swarm bespreken.<\/p>\n<p><b>In de derde les<\/b> leert u experimenten uit te voeren met Ethereum op een goedkope microcomputer, de Raspberry Pi. U installeert het besturingssysteem (OS) Rasberian op de Raspberry Pi, de Geth-tool die blockchain-knooppunten onderhoudt, en de gedecentraliseerde gegevensopslag daemon Swarm.<\/p>\n<p><b>Les vier<\/b> is gewijd aan accounts en cryptovaluta-eenheden in het Ethereum-netwerk, evenals aan methoden om geld over te maken van het ene account naar het andere vanuit de Geth-console. U leert accounts te cre\u00ebren, transacties te initi\u00ebren om geld over te maken, de status van een transactie en de bijbehorende kwitantie te verkrijgen.<\/p>\n<p><b>In les vijf<\/b> maakt u kennis met smart contracts in het Ethereum-netwerk en leert u over hun uitvoering door de Ethereum Virtual Machine. <\/p>\n<p>U zult uw eerste smart contract cre\u00ebren en publiceren in een priv\u00e9 Ethereum-netwerk en leren hoe u de functies ervan kunt aanroepen. Hiervoor gebruikt u de Remix Solidity IDE-ontwikkelomgeving. Daarnaast leert u de solc-batchcompiler te installeren en gebruiken.<br \/>\nOok zullen we het zogenaamde Application Binary Interface (ABI) uitleggen en leren hoe dit te gebruiken.<\/p>\n<p><b>Les zes<\/b> is gewijd aan het maken van JavaScript-scripts die draaien onder Node.js en operaties uitvoeren met Solidity smart contracts.<\/p>\n<p>U installeert Node.js op de besturingssystemen Ubuntu, Debian en Rasberian, en schrijft scripts voor het publiceren van een smart contract in een lokaal Ethereum-netwerk en het aanroepen van zijn functies. <\/p>\n<p>Bovendien leert u met scripts geld over te maken tussen gewone accounts en dit bij te schrijven op smart contract-accounts.<\/p>\n<p><b>In les zeven<\/b> leert u de populaire ontwikkelomgeving Truffle voor smart contracts in Solidity te installeren en gebruiken. U leert JavaScript-scripts te maken die functies van contracts aanroepen met behulp van de truffle-contractmodule, en u voert tests uit op uw smart contract met Truffle.<\/p>\n<p><b>Les acht<\/b> is gewijd aan de datatypes in Solidity. U zult smart contracts schrijven die werken met datatypes zoals signed en unsigned integers, signed numbers, strings, addresses, variabelen van complexe types, arrays, enumeraties, structuren en dictionaries.<\/p>\n<p><b>In les negen<\/b> U bent een stap dichterbij het cre\u00ebren van slimme contracten voor het Ethereum-hoofdnetsysteem. U leert hoe u contracten kunt publiceren met Truffle op een Geth-priv\u00e9netwerk en op de Rinkeby-testnet. Het debuggen van een slim contract op het Rinkeby-netwerk is zeer nuttig voordat u het publiceert op het hoofdnetsysteem \u2014 bijna alles is echt daar, maar gratis.<\/p>\n<p>In deze les maakt u een Rinkeby-testnetknoop, stelt u deze in met middelen, en publiceert u een slim contract.<\/p>\n<p><b>Les 10<\/b> is gewijd aan gedistribueerde gegevensopslag van Ethereum Swarm. Met gedistribueerde opslag bespaart u op de opslag van grote hoeveelheden gegevens in de Ethereum-blockchain. <\/p>\n<p>In deze les maakt u een lokale Swarm-opslag, voert u schrijf- en leesbewerkingen uit op bestanden en mappen met bestanden. Vervolgens leert u hoe u werkt met de openbare Swarm-gateway, schrijft u scripts voor toegang tot Swarm vanuit Node.js en gebruikt u de Perl-module Net::Ethereum::Swarm.<\/p>\n<p><b>Het doel van les 11<\/b> is om te leren werken met slimme contracten in Solidity met behulp van de populaire programmeertaal Python en het Web3.py-framework. U installeert dit framework, schrijft scripts voor het compileren en publiceren van een slim contract en voor het aanroepen van zijn functies. Web3.py zal zowel op zichzelf als samen met de ge\u00efntegreerde ontwikkelomgeving Truffle worden gebruikt.<\/p>\n<p><b>In les 12<\/b> leert u gegevens over te dragen tussen slimme contracten en de echte wereld met behulp van orakels. Dit komt van pas om gegevens van websites, IoT-apparaten, verschillende instrumenten en sensoren te verkrijgen, en om gegevens uit slimme contracten naar deze apparaten te verzenden. In het praktische deel van de les maakt u een orakel en een slim contract die de actuele wisselkoers van USD naar roebels van de centrale bank van Rusland verkrijgt.<\/p>\n<p><b class=\"spoiler_title\">Les 1. Een kort overzicht van blockchain en het Ethereum-netwerk<\/b><b>Doel van de les:<\/b> kennis maken met de principes van de werking van de Ethereum-blockchain, de toepassingsgebieden en de belangrijkste terminologie.<br \/>\n<b>Praktische opgaven:<\/b> in deze les zijn geen opgaven voorzien.<\/p>\n<p>Zelden is er vandaag de dag een softwareontwikkelaar die nog nooit heeft gehoord van de blockchain-technologie, cryptocurrencies, bitcoins, Initial Coin Offerings (ICO), slimme contracten, en andere begrippen en termen die verband houden met blockchain.<\/p>\n<p>De blockchain-technologie opent nieuwe markten en cre\u00ebert banen voor programmeurs. Als je alle fijne kneepjes van cryptocurrency-technologie\u00ebn en smart contracts onder de knie krijgt, zou je geen problemen moeten hebben met het toepassen van deze kennis in de praktijk.<\/p>\n<p>Het is vermeldenswaard dat er veel speculaties rondom cryptocurrencies en blockchains ontstaan. We laten de overpeinzingen over de fluctuaties van cryptocurrency-prijzen, het cre\u00ebren van piramides, de nuances van cryptocurrency-wetgeving, enzovoort, buiten beschouwing. In onze cursus zullen we ons voornamelijk richten op de technische aspecten van de toepassing van smart contracts op de Ethereum-blockchain (Ethereum) en de ontwikkeling van zogenaamde gedecentraliseerde applicaties (Distributed Application, DApp).<\/p>\n<h3>Wat is blockchain?<\/h3>\n<p>\nBlockchain is een keten van datablocks die op een bepaalde manier met elkaar zijn verbonden. Aan het begin van de keten bevindt zich het eerste block, dat de genesis block of het genesis block wordt genoemd. Daarna volgt het tweede, dan het derde, enzovoort.<\/p>\n<p>Al deze datablocks worden automatisch gedupliceerd op talloze knooppunten in het blockchain-netwerk. Zo wordt een gedecentraliseerde opslag van blockchain-gegevens gegarandeerd. <br \/>\nJe kunt het blockchain-systeem zien als een groot aantal knooppunten (fysieke of virtuele servers) die zijn verbonden in een netwerk en alle wijzigingen in de keten van datablocks repliceren. Het is als een gigantische multi-servercomputer, waarbij de knooppunten van deze computer (servers) over de hele wereld verspreid kunnen zijn. En jij kunt ook je computer aan het blockchain-netwerk toevoegen. <\/p>\n<h4>Gedecentraliseerde database<\/h4>\n<p>\nBlockchain kan worden gezien als een gedecentraliseerde database die op alle knooppunten in het blockchain-netwerk wordt gerepliceerd. In theorie zal de blockchain blijven functioneren zolang er minstens \u00e9\u00e9n knooppunt actief is dat alle blokken van de blockchain opslaat.<\/p>\n<h4>Gedecentraliseerd gegevensregister<\/h4>\n<p>\nBlockchain kan worden gezien als een gedecentraliseerd gegevens- en transactie-register. Een andere naam voor zo'n register is een grootboek. <\/p>\n<p>In een gedistribueerd register kunnen gegevens worden toegevoegd, maar kunnen ze niet worden gewijzigd of verwijderd. Deze onmogelijkheid wordt onder andere bereikt door het gebruik van cryptografische algoritmen, speciale algoritmen voor het toevoegen van blokken aan de keten en gedecentraliseerde opslag van gegevens.<\/p>\n<p>Bij het toevoegen van blokken en het uitvoeren van transacties worden priv\u00e9- en publieke sleutels gebruikt. Deze beperken de gebruikers van de blockchain, door hen alleen toegang te geven tot hun eigen datablocks.<\/p>\n<h4>Transacties<\/h4>\n<p>\nDe blockchain slaat informatie over transacties op in blokken. Oude, al uitgevoerde transacties kunnen niet worden teruggedraaid of gewijzigd. Nieuwe transacties worden opgeslagen in nieuwe, toegevoegde blokken.<\/p>\n<p>Zo kan in de blockchain de volledige geschiedenis van transacties onveranderd worden vastgelegd. Daarom kan de blockchain bijvoorbeeld worden gebruikt voor de veilige opslag van banktransacties, gegevens over auteursrechten, de geschiedenis van eigenaars van onroerend goed, enzovoort.<\/p>\n<p>De Ethereum blockchain bevat de zogenaamde systeemstatussen. Naarmate transacties worden uitgevoerd, verandert de status van de initi\u00eble naar de huidige. Transacties worden vastgelegd in blokken.<\/p>\n<h4>Publieke en private blockchains<\/h4>\n<p>\nHet moet opgemerkt worden dat alles wat gezegd is alleen geldt voor de zogenaamde publieke blockchain-netwerken, die niet kunnen worden gecontroleerd door enige afzonderlijke natuurlijke of rechtspersoon, overheidsinstellingen of regeringen. <br \/>\nDe zogenaamde private blockchain-netwerken staan onder volledig toezicht van hun makers, en daar is alles mogelijk, bijvoorbeeld het volledig vervangen van alle blokken in de keten.<\/p>\n<h4>Praktische toepassingen van blockchain<\/h4>\n<p>\nWaar is blockchain nuttig voor?<\/p>\n<p>Kort gezegd, blockchain maakt het mogelijk om veilig transacties uit te voeren tussen partijen of bedrijven die elkaar niet vertrouwen. Gegevens (transacties, persoonlijke gegevens, documenten, certificaten, contracten, vrachtbrieven, enz.) die in de blockchain zijn vastgelegd, kunnen niet worden vervalst of vervangen na registratie. Daarom kunnen op basis van blockchain bijvoorbeeld betrouwbare gedistribueerde registers voor verschillende soorten documenten worden gemaakt.<\/p>\n<p>Natuurlijk weet je dat cryptocurrency-systemen op blockchain-technologie zijn gebaseerd, die bedoeld zijn om gewone papieren valuta te vervangen. Papieren geld wordt ook wel fiatgeld genoemd (van Fiat Money).<br \/>\nBlockchain zorgt voor de opslag en onveranderlijkheid van transacties die in blokken zijn vastgelegd, daarom kan het worden gebruikt voor het cre\u00ebren van cryptocurrency-systemen. Het bevat de volledige geschiedenis van de overdracht van crypto-activa tussen verschillende gebruikers (accounts), waarbij elke transactie traceerbaar is.<\/p>\n<p>Hoewel transacties binnen cryptocurrency-systemen anoniem kunnen zijn, leidt het opnemen van cryptocurrency en de uitwisseling ervan voor fiatgeld meestal tot de onthulling van de identiteit van de eigenaar van de cryptocurrency-activa. <\/p>\n<p>De zogenaamde smart contracts, die software zijn die werkt op het Ethereum-netwerk, maken het mogelijk om het proces van het sluiten van deals te automatiseren en de uitvoering ervan te controleren. Dit is vooral effectief als de betaling voor de deal wordt gedaan met de cryptocurrency Ether.<\/p>\n<p>De Ethereum blockchain en Ethereum smart contracts, geschreven in de programmeertaal Solidity, kunnen worden gebruikt in gebieden zoals:<\/p>\n<ul>\n<li>een alternatief voor notari\u00eble bevestiging van documenten;<\/li>\n<li>het bijhouden van het register van onroerend goed en informatie over transacties met onroerend goed;<\/li>\n<li>het opslaan van informatie over auteursrechten op intellectuele eigendom (boeken, afbeeldingen, muziekwerken, enz.);<\/li>\n<li>het opzetten van systemen voor onafhankelijke stemprocedures;<\/li>\n<li>de financi\u00eble sector en bankactiviteiten;<\/li>\n<li>logistiek op internationaal niveau, traceerbaarheid van vrachtbewegingen;<\/li>\n<li>opslag van persoonlijke gegevens als een alternatief voor identificatiesystemen;<\/li>\n<li>veilige transacties in het commerci\u00eble domein;<\/li>\n<li>opslag van resultaten van medische onderzoeken, evenals historie van voorgeschreven procedures<\/li>\n<\/ul>\n<p><\/p>\n<h4>Problemen met blockchain<\/h4>\n<p>\nMaar het is natuurlijk niet zo eenvoudig als het lijkt! <\/p>\n<p>Er zijn problemen met de verificatie van gegevens voordat ze aan de blockchain worden toegevoegd (bijvoorbeeld, zijn ze niet vervalst?), problemen met de veiligheid van het systeem- en toepassingssoftware die wordt gebruikt voor blockchain, en problemen met de mogelijkheid om sociale-engineeringmethoden te gebruiken om toegang tot cryptocurrency-portemonnees te stelen, enz.<\/p>\n<p>Nogmaals, als we het hebben over een privaat blockchain dat eigendom is van een persoon of organisatie, in plaats van een publiek blockchain waarvan de knooppunten over de hele wereld verspreid zijn, is het betrouwbaarheidsniveau hier niet hoger dan het niveau van vertrouwen in die persoon of organisatie.<\/p>\n<p>Daarnaast moet worden opgemerkt dat gegevens die in de blockchain zijn geregistreerd, toegankelijk worden voor iedereen. In die zin is blockchain (vooral publiek) niet geschikt voor het opslaan van gevoelige informatie. Echter, het feit dat informatie in de blockchain niet kan worden gewijzigd, kan helpen bij het voorkomen of onderzoeken van verschillende soorten frauduleuze activiteiten.<\/p>\n<p>Decentrale applicaties van Ethereum zijn handiger als hun gebruik met cryptocurrency wordt betaald. Hoe meer mensen cryptocurrency bezitten of bereid zijn deze aan te schaffen, hoe populairder DApp-toepassingen en smart contracts worden.<\/p>\n<p>Onder de algemene problemen van blockchain die de praktische toepassing ervan bemoeilijken, kunnen de beperkte snelheid van het toevoegen van nieuwe blokken en de relatief hoge kosten van transacties worden genoemd. Maar technologie\u00ebn op dit gebied ontwikkelen zich actief en er zijn hoop dat technische problemen in de toekomst zullen worden opgelost.<\/p>\n<p>Een ander probleem is dat smart contracts van de Ethereum-blockchain werken in een ge\u00efsoleerde omgeving van virtuele machines, en geen toegang hebben tot gegevens uit de echte wereld. In het bijzonder kan het smart contractprogramma zelf geen gegevens van websites of fysieke apparaten (sensoren, contacten, enz.) lezen, noch kan het gegevens naar externe apparaten verzenden. Dit probleem en de manieren om het op te lossen, zullen we bespreken in de les die gewijd is aan zogenaamde Orakels \u2014 informatie-intermediairs van smart contracts.<\/p>\n<p>Daarnaast zijn er beperkingen op het gebied van wetgeving. In sommige landen is het bijvoorbeeld verboden om cryptocurrency als betaalmiddel te gebruiken, maar het is toegestaan om het te bezitten als een soort digitale activa, vergelijkbaar met effecten. Dergelijke activa kunnen op de beurs worden gekocht en verkocht. In ieder geval is het noodzakelijk om bij het opzetten van een project dat met cryptocurrency werkt, de wetgeving van het land te raadplegen waaronder uw project valt.<\/p>\n<h3>Hoe de blockchain-keten wordt gevormd<\/h3>\n<p>\nZoals we al hebben gezegd, is blockchain een eenvoudige keten van blokken met gegevens. Eerst wordt het eerste blok van deze keten gemaakt, daarna wordt het tweede eraan toegevoegd, enzovoort. Het wordt verondersteld dat transactiegegevens in de blokken worden opgeslagen en aan het laatste blok worden toegevoegd.<\/p>\n<p>In fig. 1.1 hebben we de eenvoudigste optie van een blokvolgorde getoond, waarbij het eerste blok naar het volgende verwijst. <\/p>\n<p><img decoding=\"async\" alt=\"Boek \u00abSmart Contracts Solidity maken voor de Ethereum-blockchain. Praktische handleiding\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/23ca04ba2c8914334032523d01bf8b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figuur 1.1. Eenvoudige volgorde van blokken<\/i><\/p>\n<p>In dit geval kan echter de inhoud van elk blok in de keten heel eenvoudig worden vervalst, aangezien de blokken geen enkele informatie bevatten ter bescherming tegen wijzigingen. Aangezien blockchain bedoeld is voor gebruik door mensen en bedrijven die elkaar niet vertrouwen, kan worden geconcludeerd dat deze manier van gegevensopslag niet geschikt is voor blockchain.<\/p>\n<p>Laten we ons richten op het beschermen van blokken tegen vervalsing. In de eerste fase zullen we proberen elk blok te beveiligen met een controlegetal (fig. 1.2).<\/p>\n<p><img decoding=\"async\" alt=\"Boek \u00abSmart Contracts Solidity maken voor de Ethereum-blockchain. Praktische handleiding\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/141502accec14e868a9382c612cfc791.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figuur 1.2. We voegen een gegevensbescherming voor blokken toe met controlegetal<\/i><\/p>\n<p>Nu kan een aanvaller niet zomaar een blok wijzigen, omdat dit blok een controlegetal van de gegevens bevat. Controle van het controlegetal zal aantonen dat de gegevens zijn gewijzigd.<\/p>\n<p>Voor het berekenen van het controlegetal kan een van de hashingfuncties worden gebruikt, zoals MD-5, SHA-1, SHA-256, enzovoort. Hash-functies berekenen een bepaalde waarde (bijvoorbeeld in de vorm van een tekststring van constante lengte) als resultaat van onomkeerbare bewerkingen op een blok gegevens. De bewerkingen zijn afhankelijk van het type hash-functie. <\/p>\n<p>Zelfs bij een kleine wijziging in de inhoud van het blok gegevens zal de waarde van de hash-functie ook veranderen. Door de waarde van de hash-functie te analyseren, is het onmogelijk om het gegevensblok te herstellen waarvoor deze is berekend.<\/p>\n<p>Zal deze bescherming voldoende zijn? Helaas niet.<\/p>\n<p>In dit schema beschermt het controlegetal (hash-functie) alleen individuele blokken, maar niet de hele keten van blokken. Wetende hoe de hash-functie wordt berekend, kan een aanvaller gemakkelijk de inhoud van een blok vervangen. Ook staat niets hem toe om blokken uit de keten te verwijderen of nieuwe toe te voegen.<\/p>\n<p>Om de hele keten als geheel te beschermen, kan in elk blok samen met de gegevens ook de hash van het eerdere blok worden opgeslagen (fig. 1.3).<\/p>\n<p><img decoding=\"async\" alt=\"Boek \u00abSmart Contracts Solidity maken voor de Ethereum-blockchain. Praktische handleiding\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/f414ab67dbabc763c537a430e01ed065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Figuur 1.3. We voegen de hash van het vorige blok toe in de blokgegevens<\/i><\/p>\n<p>In dit systeem, om een blok te wijzigen, moeten de hashfuncties van alle daaropvolgende blokken opnieuw worden berekend. Lijkt er een probleem te zijn?<\/p>\n<p>In echte blockchains zijn er bovendien kunstmatige moeilijkheden gecre\u00eberd voor het toevoegen van nieuwe blokken - er worden algoritmen gebruikt die veel rekenkracht vereisen. Gezien het feit dat het herberekenen van de wijziging niet alleen voor dat blok, maar voor alle daaropvolgende blokken moet gebeuren, zal het extreem moeilijk zijn om dit te doen.<\/p>\n<p>Laten we ook niet vergeten dat de data van de blockchain (gedupliceerd) worden opgeslagen op talloze nodes in het netwerk, d.w.z. er wordt gebruik gemaakt van gedecentraliseerde opslag. Dit maakt het vervalsen van een blok aanzienlijk moeilijker, omdat de wijzigingen op alle nodes in het netwerk moeten worden doorgevoerd.<\/p>\n<p>Aangezien blokken informatie over het vorige blok bevatten, kan de inhoud van alle blokken in de keten worden gecontroleerd.<\/p>\n<h3>Ethereum Blockchain<\/h3>\n<p>\nDe Ethereum Blockchain is een platform waarop gedistribueerde applicaties DApp kunnen worden ontwikkeld. In tegenstelling tot andere platforms, stelt Ethereum het gebruik van zogenaamde slimme contracten (smart contracts) mogelijk, geschreven in de programmeertaal Solidity.<\/p>\n<p>Dit platform werd in 2013 opgericht door Vitalik Buterin, de oprichter van het tijdschrift Bitcoin Magazine, en gelanceerd in 2015. Alles wat we in onze cursus zullen bestuderen of doen, heeft betrekking op de Ethereum blockchain en Solidity smart contracts.<\/p>\n<h3>Mining of hoe blokken worden gemaakt<\/h3>\n<p>\nMining (mining) is een vrij complex en resource-intensief proces voor het toevoegen van nieuwe blokken aan de blockchain, en is niet gewoon het 'delven van cryptocurrency'. Mining waarborgt de functionaliteit van de blockchain, omdat dit proces verantwoordelijk is voor het toevoegen van transacties aan de Ethereum blockchain.<\/p>\n<p>Personen en organisaties die zich bezighouden met het toevoegen van blokken worden miners (miner) genoemd.<br \/>\nDe software (software) die draait op de miners' nodes probeert voor het laatste blok een hashing-parameter genaamd Nonce te vinden, zodat er een bepaald waarde van de hashfunctie, zoals door het netwerk is opgegeven, wordt verkregen. Het hashing-algoritme Ethash, toegepast in Ethereum, staat alleen het verkrijgen van de waarde van Nonce toe door middel van sequenti\u00eble pogingen. <\/p>\n<p>Als de mijnnode de juiste Nonce-waarde heeft gevonden, is dit wat men een bewijs van werk (PoW, Proof-of-work) noemt. In dat geval ontvangt de mijnwerker een bepaalde beloning in de valuta van het netwerk \u2013 Ether \u2013 wanneer het blok aan het Ethereum-netwerk wordt toegevoegd. Op het moment van het schrijven van dit boek bedraagt de beloning 5 Ether, maar in de loop van de tijd zal dit worden verlaagd.<\/p>\n<p>Daarom waarborgen Ethereum-mijnwerkers de werking van het netwerk door blokken toe te voegen en ontvangen ze hiervoor cryptocurrency-betalingen. Op internet vind je een overvloed aan informatie over mijnwerkers en mining, maar wij zullen ons richten op het cre\u00ebren van Solidity-contracten en gedecentraliseerde toepassingen (DApp) binnen het Ethereum-netwerk.<\/p>\n<h3>Lesoverzicht<\/h3>\n<p>\nIn de eerste les heb je kennisgemaakt met blockchain en geleerd dat het een speciaal samengestelde reeks blokken is. De inhoud van eerder opgeslagen blokken kan niet worden gewijzigd, omdat dit zou betekenen dat alle volgende blokken op vele knooppunten in het netwerk opnieuw moeten worden berekend, wat veel middelen en tijd kost.<\/p>\n<p>Blockchain kan worden toegepast voor het bewaren van de resultaten van uitgevoerde transacties. Het belangrijkste doel is het organiseren van veilige transacties tussen partijen (personen en organisaties) die geen vertrouwen in elkaar hebben. Je hebt geleerd in welke specifieke bedrijfsgebieden en sectoren de Ethereum-blockchain en Solidity-smartcontracten kunnen worden gebruikt. Dit omvat de banksector, eigendomsregistratie, documentatie, enzovoort.<\/p>\n<p>Je hebt ook geleerd dat er verschillende problemen kunnen optreden bij het gebruik van blockchain. Dit betreft de verificatie van informatie die aan de blockchain wordt toegevoegd, de snelheid van de blockchain, de kosten van transacties, het probleem van gegevensuitwisseling tussen smart contracts en de echte wereld, alsmede potenti\u00eble aanvallen van kwaadwillenden gericht op het stelen van cryptocurrency-fondsen van gebruikersaccounts.<\/p>\n<p>Daarnaast hebben we kort het miningproces besproken als het toevoegen van nieuwe blokken aan de blockchain. Mining is noodzakelijk voor het uitvoeren van transacties. Diegenen die zich bezighouden met mining zorgen voor de functionaliteit van de blockchain en ontvangen hiervoor beloningen in cryptocurrency.<\/p>\n<p><b class=\"spoiler_title\">Les 2. Voorbereiden van de werkomgeving in Ubuntu en Debian<\/b>Selectie van het besturingssysteem<br \/>\nInstallatie van de noodzakelijke hulpprogramma's<br \/>\nInstallatie van Geth en Swarm in Ubuntu<br \/>\nInstallatie van Geth en Swarm in Debian<br \/>\nVoorbereiding<br \/>\nLaden van de Go-distributie<br \/>\nInstelling van omgevingsvariabelen<br \/>\nControleren van de versie van Go<br \/>\nInstalleren van Geth en Swarm<br \/>\nWe cre\u00ebren een priv\u00e9blockchain<br \/>\n\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0430\u0439\u043b genesis.json<br \/>\nWe cre\u00ebren een map voor het werk<br \/>\nWe cre\u00ebren een account<br \/>\nWe starten de initialisatie van de node<br \/>\nStartparameters voor de node<br \/>\nWe verbinden met onze node<br \/>\nBeheer van mining en controle van het saldo<br \/>\nAfsluiten van de Geth-console<br \/>\nLesoverzicht<\/p>\n<p><b class=\"spoiler_title\">Les 3. Voorbereiding van de werkomgeving op Raspberry Pi 3<\/b>Voorbereiding van Raspberry Pi 3 voor gebruik<br \/>\nInstallatie van Raspbian<br \/>\nInstalleren van updates<br \/>\nSSH-toegang inschakelen<br \/>\nInstellen van een statisch IP-adres<br \/>\nInstallatie van de noodzakelijke hulpprogramma's<br \/>\nInstallatie van Go<br \/>\nLaden van de Go-distributie<br \/>\nInstelling van omgevingsvariabelen<br \/>\nControleren van de versie van Go<br \/>\nInstalleren van Geth en Swarm<br \/>\nWe cre\u00ebren een priv\u00e9blockchain<br \/>\nControleren van account en saldo<br \/>\nLesoverzicht<\/p>\n<p><b class=\"spoiler_title\">Les 4. Accounts en het overdragen van middelen tussen accounts<\/b>Bekijken en toevoegen van accounts<br \/>\nBekijken van de lijst met accounts<br \/>\nAccount toevoegen<br \/>\nParameters van het commando geth account<br \/>\nWachtwoorden van accounts<br \/>\nCryptovaluta in Ethereum<br \/>\nValuta-eenheden van Ethereum<br \/>\nBepalen van het huidige saldo van onze accounts<br \/>\nOverdragen van middelen van de ene account naar de andere<br \/>\nMethode eth.sendTransaction<br \/>\nBekijk de status van de transactie<br \/>\nOntvangstbewijs van de transactie<br \/>\nLesoverzicht<\/p>\n<p><b class=\"spoiler_title\">Les 5. Publicatie van het eerste contract<\/b>Slimme contracten in Ethereum<br \/>\nUitvoeren van een slim contract<br \/>\nEthereum virtuele machine<br \/>\nGe\u00efntegreerde ontwikkelomgeving Remix Solidity IDE<br \/>\nStarten van de compilatie<br \/>\nOproepen van contractfuncties<br \/>\nPubliceren van het contract in een priv\u00e9 netwerk<br \/>\nWij krijgen de definitie van ABI en de binaire code van het contract<br \/>\nPubliceren van het contract<br \/>\nControleren van de status van de publicatietransactie van het contract<br \/>\nOproepen van contractfuncties<br \/>\nBatchcompiler solc<br \/>\nInstalleren van solc in Ubuntu<br \/>\nInstalleren van solc in Debian<br \/>\nCompileren van het HelloSol-contract<br \/>\nPubliceren van het contract<br \/>\nInstalleren van solc op Raspbian<br \/>\nLesoverzicht<\/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 \/>\nInstalleren in Ubuntu<br \/>\nInstalleren in Debian<br \/>\nInstalleren en starten van Ganache-cli<br \/>\nInstalleren van Web3<br \/>\nInstalleren van solc<br \/>\nInstalleren van Node.js op Raspbian<br \/>\nScript voor het ophalen van de lijst met accounts in de console<br \/>\nScript voor het publiceren van een slim contract<br \/>\nStarten en verkrijgen van parameters<br \/>\nVerkrijgen van startparameters<br \/>\nCompileren van het contract<br \/>\nAccount ontgrendelen<br \/>\nLaden van ABI en binaire code van het contract<br \/>\nBeoordeling van de benodigde hoeveelheid gas<br \/>\nCre\u00ebren van een object en starten van de publicatie van het contract<br \/>\nStarten van het script voor de publicatie van het contract<br \/>\nOproepen van functies van het slimme contract<br \/>\nIs het mogelijk om het gepubliceerde slimme contract bij te werken<br \/>\nWerken met Web3 versie 1.0.x<br \/>\nWij krijgen de lijst met accounts<br \/>\nPubliceren van het contract<br \/>\nOproepen van contractfuncties<br \/>\nOverdragen van middelen van de ene account naar de andere<br \/>\nOverdragen van middelen naar het contractaccount<br \/>\nBijwerken van het slimme contract HelloSol<br \/>\nWe cre\u00ebren een script voor het bekijken van het saldo van een account<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 \/>\nVullen van het saldo van het slimme contract<br \/>\nLesoverzicht<\/p>\n<p><b class=\"spoiler_title\">Les 7. Inleiding tot Truffle<\/b>Installeren van Truffle<br \/>\nWe cre\u00ebren het HelloSol-project<br \/>\nCre\u00ebren van de map en bestanden van het project<br \/>\nMap contracts<br \/>\nCatalogus migrations<br \/>\nCatalogus test<br \/>\n\u0424\u0430\u0439\u043b truffle-config.js<br \/>\nCompileren van het HelloSol-contract<br \/>\nPublicatie van het contract starten<br \/>\nContractfuncties HelloSol aanroepen in Truffle-uitnodiging<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-contractmodule installeren<br \/>\nContractfuncties getValue en getString aanroepen<br \/>\nContractfuncties setValue en setString aanroepen<br \/>\nContract wijzigen en opnieuw publiceren<br \/>\nWerken met Web3 versie 1.0.x<br \/>\nWijzigingen aanbrengen in de smart contract HelloSol<br \/>\nScripts voor het aanroepen van contractmethoden<br \/>\nTesten in Truffle<br \/>\nTesten in Solidity<br \/>\nTesten in JavaScript<br \/>\nLesoverzicht<\/p>\n<p><b class=\"spoiler_title\">Les 8. Gegevens Types in Solidity<\/b>Contract voor het bestuderen van gegevens types<br \/>\nLogische gegevenstypen<br \/>\nNiet-teken en teken getallen<br \/>\nVastkomma getallen<br \/>\nAdres<br \/>\nVariabelen van complexe types<br \/>\nArrays met vaste grootte<br \/>\nDynamische arrays<br \/>\nOpsomming<br \/>\nStructuren<br \/>\nMapping woordenboeken<br \/>\nLesoverzicht<\/p>\n<p><b class=\"spoiler_title\">Les 9. Contract migratie naar een priv\u00e9 net en het Rinkeby netwerk<\/b>Contract publiceren vanuit Truffle naar een priv\u00e9 Geth-netwerk<br \/>\nVoorbereiding van een priv\u00e9 net node<br \/>\nContract voorbereiden voor gebruik<br \/>\nCompileren en migreren van het contract naar het Truffle-netwerk<br \/>\nMigratie starten naar het lokale geth-netwerk<br \/>\nTruffle artefacten verzamelen<br \/>\nContract publiceren vanuit Truffle naar het Rinkeby testnet<br \/>\nVoorbereiding van Geth-node voor Rinkeby<br \/>\nSynchroniseren van de node<br \/>\nAccounts toevoegen<br \/>\nRinkeby-account opwaarderen met Ether<br \/>\nContract migratie starten naar het Rinkeby-netwerk<br \/>\nInformatie over het contract bekijken in het Rinkeby-netwerk<br \/>\nTruffle console voor het Rinkeby netwerk<br \/>\neenvoudigere manier om contractfuncties aan te roepen<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 \/>\nOverdracht van middelen tussen accounts in de Truffle-console voor Rinkeby<br \/>\nLesoverzicht<\/p>\n<p><b class=\"spoiler_title\">Les 10. Gedecentraliseerde dataopslag Ethereum Swarm<\/b>Hoe werkt Ethereum Swarm<br \/>\nSwarm installeren en starten<br \/>\nBestands- en directorybewerkingen<br \/>\nBestand uploaden naar Ethereum Swarm<br \/>\nBestand lezen uit Ethereum Swarm<br \/>\nWeergave van het manifest van het ge\u00fcploade bestand<br \/>\nMappen met submappen uploaden<br \/>\nBestand lezen uit de ge\u00fcploade map<br \/>\nPublieke Swarm-gateway gebruiken<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-module Net::Ethereum::Swarm<br \/>\nModule Net::Ethereum::Swarm installeren<br \/>\nGegevens schrijven en lezen<br \/>\nLesoverzicht<\/p>\n<p><b class=\"spoiler_title\">Les 11. Web3.py framework voor Ethereum-werking op Python<\/b>Web3.py installeren<br \/>\nBijwerken en installeren van benodigde pakketten<br \/>\nEasysolc-module installeren<br \/>\nContract publiceren met behulp van Web3.py<br \/>\nCompileren van het contract<br \/>\nVerbinden met de provider<br \/>\nPublicatie van het contract uitvoeren<br \/>\nContractadres en abi opslaan in een bestand<br \/>\nStarten van het script voor de publicatie van het contract<br \/>\nContractmethoden aanroepen<br \/>\nContractadres en abi lezen uit een JSON-bestand<br \/>\nVerbinden met de provider<br \/>\nContractobject maken<br \/>\nContractmethoden aanroepen<br \/>\nTruffle en Web3.py<br \/>\nLesoverzicht<\/p>\n<p><b class=\"spoiler_title\">Les 12. Orakels<\/b>Kan een smart contract vertrouwen op gegevens uit de echte wereld<br \/>\nOrakels als informatieve tussenpersonen van de blockchain<br \/>\nGegevensbron<br \/>\nCode voor het presenteren van gegevens uit de bron<br \/>\nOracle voor het opslaan van de wisselkoers in de blockchain<br \/>\nContract USDRateOracle<br \/>\nBijwerken van de wisselkoers in het slimme contract<br \/>\nGebruik van de Web Socket-provider<br \/>\nWachten op het evenement RateUpdate<br \/>\nVerwerken van het evenement RateUpdate<br \/>\nInitialiseren van de gegevensupdate in het slimme contract<br \/>\nLesoverzicht<\/p>\n<p>Bron: <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.3 - 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\/nl\/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.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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\udd47Boek \u2018Slimme contracten bouwen met Solidity voor de Ethereum blockchain. Praktische gids\u2019 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/39018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=39018"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/39018\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/29275"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=39018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=39018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=39018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}