{"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\/da\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","title":{"rendered":"Bogen \"Oprettelse af smarte kontrakter ved hj\u00e6lp af Solidity til Ethereum blockchain. Praktisk vejledning\"","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Bogen &quot;Oprettelse af smarte kontrakter ved hj\u00e6lp af Solidity til Ethereum blockchain. Praktisk vejledning&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/9549e708e99fef6892045ff854231fa7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nI har arbejdet mere end et \u00e5r p\u00e5 bogen \"Oprettelse af smarte kontrakter i Solidity for Ethereum blockchain. En praktisk vejledning\", og nu er dette arbejde fuldf\u00f8rt, og bogen <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">er udgivet og tilg\u00e6ngelig p\u00e5 Litres<\/a><\/noindex>.<\/p>\n<p>Jeg h\u00e5ber, min bog hj\u00e6lper med hurtigt at komme i gang med at skabe smarte kontrakter i Solidity og distribuerede applikationer DApp til Ethereum blockchain. Den best\u00e5r af 12 lektioner med praktiske opgaver. Ved at udf\u00f8re dem vil l\u00e6seren v\u00e6re i stand til at oprette sine egne lokale Ethereum-noder, offentligg\u00f8re smarte kontrakter og kalde deres metoder, samt udveksle data mellem den virkelige verden og smarte kontrakter ved hj\u00e6lp af orakler, og arbejde med testnetv\u00e6rket Rinkeby. <\/p>\n<p>Bogen henvender sig til alle, der er interesseret i avancerede teknologier inden for blockchain og \u00f8nsker hurtigt at f\u00e5 den viden, der g\u00f8r det muligt at arbejde med sp\u00e6ndende og lovende opgaver.<\/p>\n<p>Nedenfor finder du indholdsfortegnelsen og det f\u00f8rste kapitel af bogen (ogs\u00e5 p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">Litres<\/a><\/noindex> er der tilg\u00e6ngelige uddrag af bogen). Jeg ser frem til at modtage feedback, kommentarer og forslag. Alt dette vil jeg fors\u00f8ge at tage i betragtning ved forberedelsen af n\u00e6ste udgave af bogen.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Indholdsfortegnelse<\/b><b class=\"spoiler_title\">Introduktion<\/b>Vores bog er beregnet til dem, der ikke blot \u00f8nsker at forst\u00e5, hvordan Ethereum blockchain fungerer, men ogs\u00e5 \u00f8nsker at f\u00e5 praktiske f\u00e6rdigheder i oprettelse af distribuerede applikationer DApp ved hj\u00e6lp af programmeringssproget Solidity til dette netv\u00e6rk.<\/p>\n<p>Det er bedre at arbejde med denne bog end blot at l\u00e6se den og udf\u00f8re de praktiske opgaver, der er beskrevet i lektionerne. For at arbejde med den vil du have brug for en lokal computer, en virtuel eller cloud-server med installeret Debian eller Ubuntu. Mange opgaver kan ogs\u00e5 udf\u00f8res p\u00e5 en Raspberry Pi.<\/p>\n<p><b>I den f\u00f8rste lektion <\/b>vil vi se p\u00e5, hvordan Ethereum blockchain fungerer, og den grundl\u00e6ggende terminologi, samt fort\u00e6lle om, hvor dette blockchain kan anvendes. <\/p>\n<p>Form\u00e5let <b>Den anden lektion<\/b> er at oprette en privat Ethereum blockchain-node til videre brug i dette kursus p\u00e5 en Ubuntu- og Debian-server. Vi vil gennemg\u00e5 installationen af de grundl\u00e6ggende v\u00e6rkt\u00f8jer, s\u00e5som geth, der muligg\u00f8r driften af vores blockchain-node, samt d\u00e6monen for det decentraliserede datalager swarm.<\/p>\n<p><b>Den tredje lektion<\/b> vil l\u00e6re dig at eksperimentere med Ethereum p\u00e5 en billig Raspberry Pi-mikrocomputer. Du vil installere operativsystemet (OS) Rasberian p\u00e5 Raspberry Pi, v\u00e6rkt\u00f8jet Geth, som muligg\u00f8r driften af blockchain-noden, samt den decentrale datalagerdaemon Swarm.<\/p>\n<p><b>Fjerde lektion<\/b> er dedikeret til konti og kryptovalutaer i Ethereum-netv\u00e6rket samt metoder til at overf\u00f8re midler fra en konto til en anden via Geth-konsollen. Du vil l\u00e6re at oprette konti, initiere transaktioner til overf\u00f8rsel af midler, f\u00e5 transaktionens status og modtage en kvittering.<\/p>\n<p><b>I den femte lektion<\/b> bliver du introduceret til smart contracts i Ethereum-netv\u00e6rket, og du vil l\u00e6re om deres udf\u00f8relse af Ethereum Virtual Machine. <\/p>\n<p>Du vil oprette og offentligg\u00f8re din f\u00f8rste smart contract i Ethereum's private netv\u00e6rk og l\u00e6re at kalde dens funktioner. Til dette vil du bruge udviklingsmilj\u00f8et Remix Solidity IDE. Derudover vil du l\u00e6re at installere og bruge batchkompilatoren solc.<br \/>\nVi vil ogs\u00e5 fort\u00e6lle om den s\u00e5kaldte Application Binary Interface (ABI) og l\u00e6re dig at bruge den.<\/p>\n<p><b>Sjette lektion<\/b> er dedikeret til oprettelse af JavaScript-scripts, der k\u00f8rer under Node.js og udf\u00f8rer operationer med Solidity smart contracts.<\/p>\n<p>Du vil installere Node.js p\u00e5 Ubuntu, Debian og Rasberian, og skrive scripts til at offentligg\u00f8re din smart contract i det lokale Ethereum-netv\u00e6rk og kalde dens funktioner. <\/p>\n<p>Derudover vil du l\u00e6re at overf\u00f8re midler mellem almindelige konti ved hj\u00e6lp af scripts samt indbetale dem p\u00e5 smart contract-konti.<\/p>\n<p><b>I den syvende lektion<\/b> vil du l\u00e6re at installere og bruge den popul\u00e6re Truffle-integrerede udviklingsmilj\u00f8 blandt udviklere af smart contracts. Du vil l\u00e6re at skrive JavaScript-scripts, der kalder kontraktfunktioner ved hj\u00e6lp af truffle-contract-modulet, samt udf\u00f8re testning af din smart contract med Truffle.<\/p>\n<p><b>Ottende lektion<\/b> er dedikeret til datatyper i Solidity. Du vil skrive smart contracts, der arbejder med datatyper som signerede og usignerede heltal, signede tal, strenge, adresser, variabler af komplekse typer, arrays, enumerationer, strukturer og ordb\u00f8ger.<\/p>\n<p><b>I den niende lektion<\/b> Du vil komme et skridt n\u00e6rmere p\u00e5 at skabe smart contracts til hovednetv\u00e6rket Ethereum. Du vil l\u00e6re at publicere kontrakter ved hj\u00e6lp af Truffle i et privat Geth-netv\u00e6rk samt i testnetv\u00e6rket Rinkeby. Fejlretning af smart contracts p\u00e5 Rinkeby-netv\u00e6rket er meget nyttigt, inden de publiceres p\u00e5 hovednetv\u00e6rket \u2014 det er n\u00e6sten alt reelt, men gratis.<\/p>\n<p>I denne lektion vil du oprette en node i testnetv\u00e6rket Rinkeby, fylde den med midler og offentligg\u00f8re en smart contract.<\/p>\n<p><b>Lektion 10<\/b> handler om distribuerede datalagre Ethereum Swarm. Ved at bruge distribuerede lagre sparer du penge p\u00e5 lagring af store m\u00e6ngder data i Ethereum blockchain. <\/p>\n<p>I denne lektion vil du oprette et lokalt Swarm-lager, udf\u00f8re skrive- og l\u00e6seoperationer med filer samt kataloger med filer. Derefter vil du l\u00e6re at arbejde med den offentlige Swarm-gateway, skrive scripts til at f\u00e5 adgang til Swarm fra Node.js og med Perl-modulet Net::Ethereum::Swarm.<\/p>\n<p><b>M\u00e5let med lektion 11<\/b> er at mestre arbejdet med smart contracts i Solidity ved hj\u00e6lp af det popul\u00e6re programmeringssprog Python og rammev\u00e6rket Web3.py. Du vil installere dette rammev\u00e6rk, skrive scripts til at kompilere og publicere smart contracts samt til at kalde deres funktioner. I denne forbindelse vil Web3.py blive brugt b\u00e5de alene og sammen med den integrerede udviklingsmilj\u00f8 Truffle.<\/p>\n<p><b>I lektion 12<\/b> vil du l\u00e6re at overf\u00f8re data mellem smart contracts og den virkelige verden ved hj\u00e6lp af orakler. Dette vil v\u00e6re nyttigt for at hente data fra websteder, IoT-enheder, forskellige instrumenter og sensorer, samt at sende data fra smart contracts til disse enheder. I den praktiske del af lektionen vil du oprette et orakel og en smart contract, der f\u00e5r den aktuelle valutakurs for USD til rubler fra den russiske centralbank.<\/p>\n<p><b class=\"spoiler_title\">Lektion 1. Kort om blockchain og Ethereum-netv\u00e6rket<\/b><b>M\u00e5let med lektionen:<\/b> at blive bekendt med principperne for, hvordan Ethereum-blockchain fungerer, dens anvendelsesomr\u00e5der og hovedterminologi.<br \/>\n<b>Praktiske opgaver:<\/b> der er ikke planlagt nogle i denne lektion.<\/p>\n<p>Sandsynligvis findes der i dag ikke en softwareudvikler (SO), der ikke har h\u00f8rt om blockchain-teknologi, kryptovalutaer, bitcoins, initial coin offerings (ICO), smart contracts samt andre begreber og termer relateret til blockchain.<\/p>\n<p>Blockchain-teknologi \u00e5bner nye markeder og skaber arbejdspladser for programm\u00f8rer. Hvis du mestrer alle nuancer af kryptovalutateknologier og smart contracts, b\u00f8r du ikke have problemer med at anvende denne viden i praksis.<\/p>\n<p>Det skal siges, at der opst\u00e5r mange spekulationer omkring kryptovalutaer og blockchains. Vi vil l\u00e6gge diskussioner om \u00e6ndringer i kryptovalutakurser, pyramideopbygning og nuancerne af kryptovaluta-lovgivning til side. I vores kursus fokuserer vi prim\u00e6rt p\u00e5 de tekniske aspekter ved anvendelsen af smart contracts p\u00e5 Ethereum blockchain (Ethereum, ether) og udviklingen af de s\u00e5kaldte decentrale applikationer (Distributed Application, DApp).<\/p>\n<h3>Hvad er blockchain<\/h3>\n<p>\nBlockchain (Blockchain, Block Chain) er en k\u00e6de af datablokke, der er forbundet p\u00e5 en bestemt m\u00e5de. I begyndelsen af k\u00e6den ligger den f\u00f8rste blok, som kaldes genesis-blokken (genesis block). Derefter f\u00f8lger den anden, den tredje og s\u00e5 videre.<\/p>\n<p>Alle disse datablokke kopieres automatisk p\u00e5 de mange noder i blockchain-netv\u00e6rket. Dette sikrer decentraliseret datalagring for blockchain. <br \/>\nDu kan forestille dig et blockchain-system som et stort antal noder (fysiske eller virtuelle servere) forbundet i et netv\u00e6rk, der replikerer alle \u00e6ndringer i k\u00e6den af datablokke. Det er som en k\u00e6mpe multi-server computer, hvor noderne af denne computer (servere) kan v\u00e6re spredt over hele verden. Og du kan ogs\u00e5 tilf\u00f8je din computer til blockchain-netv\u00e6rket. <\/p>\n<h4>Fordelt database<\/h4>\n<p>\nBlockchain kan betragtes som en distribueret database, der replikeres p\u00e5 alle noder i blockchain-netv\u00e6rket. Teoretisk vil blockchain fungere, s\u00e5 l\u00e6nge der er mindst \u00e9n node, der opbevarer alle blokke i blockchain.<\/p>\n<h4>Fordelt dataliste<\/h4>\n<p>\nBlockchain kan betragtes som en distribueret liste over data og transaktioner. Et andet navn for denne liste er hovedbogen. <\/p>\n<p>I et distribueret register kan der tilf\u00f8jes data, men de kan ikke \u00e6ndres eller slettes. Denne umulighed opn\u00e5s blandt andet ved brug af kryptografiske algoritmer, s\u00e6rlige algoritmer til tilf\u00f8jelse af blokke til k\u00e6den og decentral lagring af data.<\/p>\n<p>Ved tilf\u00f8jelse af blokke og udf\u00f8relse af operationer (transaktioner) anvendes private og offentlige n\u00f8gler. De begr\u00e6nser brugerne af blockchain og giver dem adgang kun til deres egne datablokke.<\/p>\n<h4>Transaktioner<\/h4>\n<p>\nBlockchain gemmer information om operationer (transaktioner) i blokke. Gamle, allerede udf\u00f8rte transaktioner kan ikke rulles tilbage eller \u00e6ndres. Nye transaktioner gemmes i nye, tilf\u00f8jede blokke.<\/p>\n<p>Dermed kan hele transaktionshistorien registreres u\u00e6ndret i blockchain. Derfor kan blockchain bruges, for eksempel til sikker opbevaring af banktransaktioner, oplysninger om ophavsret, ejendomshistorik og lignende.<\/p>\n<p>Ethereum blockchain indeholder de s\u00e5kaldte systemstatusser. Efterh\u00e5nden som transaktioner udf\u00f8res, \u00e6ndres status fra den oprindelige til den nuv\u00e6rende. Transaktioner registreres i blokke.<\/p>\n<h4>Offentlige og private blockchains<\/h4>\n<p>\nDet skal bem\u00e6rkes, at alt dette kun g\u00e6lder for de s\u00e5kaldte offentlige blockchain-netv\u00e6rk, som ikke kan kontrolleres af nogen enkeltpersoner, juridiske personer, statslige organer eller regeringer. <br \/>\nDe s\u00e5kaldte private blockchain-netv\u00e6rk er under fuld kontrol af deres skabere, og her er alt muligt, for eksempel en total udskiftning af alle blokke i k\u00e6den.<\/p>\n<h4>Praktiske anvendelser af blockchain<\/h4>\n<p>\nHvad kan blockchain bruges til?<\/p>\n<p>Kort sagt muligg\u00f8r blockchain sikre transaktioner mellem parter eller virksomheder, der ikke har tillid til hinanden. Data, der er registreret i blockchain (transaktioner, personoplysninger, dokumenter, attester, kontrakter, fraktbreve osv.), kan ikke forfalskes eller \u00e6ndres efter registrering. Derfor kan der p\u00e5 baggrund af blockchain oprettes, for eksempel, p\u00e5lidelige distribuerede registre af forskellige dokumenttyper.<\/p>\n<p>Selvf\u00f8lgelig ved du, at kryptovaluta-systemer skabes p\u00e5 basis af blockchain-teknologi, som har til form\u00e5l at erstatte almindelige papirpenger. Papirpenger kaldes ogs\u00e5 fiat penge (fra Fiat Money).<br \/>\nBlockchain sikrer opbevaring og uforanderlighed af transaktioner, der er indskrevet i blokke, derfor kan det bruges til at skabe kryptovaluta-systemer. Det indeholder hele historien om overf\u00f8rsel af kryptovaluta mellem forskellige brugere (konti), hvor enhver transaktion kan spores.<\/p>\n<p>Selvom transaktioner inden for kryptovaluta-systemer kan v\u00e6re anonyme, f\u00f8rer udbetaling af kryptovaluta og omveksling til fiat penge normalt til afsl\u00f8ringen af ejerens identitet for den kryptovaluta aktiv. <\/p>\n<p>De s\u00e5kaldte smart contracts, som er software, der k\u00f8rer p\u00e5 Ethereum-netv\u00e6rket, muligg\u00f8r automatisering af processen med at indg\u00e5 aftaler og overv\u00e5ge deres gennemf\u00f8relse. Dette er s\u00e6rligt effektivt, hvis betalingen for aftalen sker med kryptovalutaen Ether.<\/p>\n<p>Ethereum blockchain og Ethereum smart contracts, der er skrevet i programmeringssproget Solidity, kan anvendes i eksempelvis f\u00f8lgende omr\u00e5der:<\/p>\n<ul>\n<li>alternativ til notarisk bekr\u00e6ftelse af dokumenter;<\/li>\n<li>opbevaring af register for ejendom og information om ejendomshandler;<\/li>\n<li>opbevaring af oplysninger om ophavsret til intellektuelle ejendomme (b\u00f8ger, billeder, musikv\u00e6rker osv.);<\/li>\n<li>oprettelse af systemer for uafh\u00e6ngig afstemning;<\/li>\n<li>finans- og bankvirksomhed;<\/li>\n<li>logistik p\u00e5 internationalt plan, sporing af godstransport;<\/li>\n<li>opbevaring af personlige data som en analog til identifikationssystemer;<\/li>\n<li>sikre transaktioner inden for kommercielle omr\u00e5der;<\/li>\n<li>opbevaring af resultater fra medicinske unders\u00f8gelser samt historikken for de tildelte procedurer.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Problemer med blockchain<\/h4>\n<p>\nMen selvf\u00f8lgelig er det ikke alt s\u00e5 enkelt, som det kunne synes! <\/p>\n<p>Der er problemer med verifikation af data f\u00f8r de tilf\u00f8jes til blockchain (for eksempel, om de er \u00e6gte?), problemer med sikkerheden af system- og applikationssoftware, der anvendes til at arbejde med blockchain, problemer med muligheden for at anvende metoder til social engineering for at stj\u00e6le adgang til wallets med kryptovaluta osv.<\/p>\n<p>Igen, hvis det drejer sig om en privat blockchain, der tilh\u00f8rer en person eller organisation, vil niveauet af tillid ikke v\u00e6re h\u00f8jere end det niveau af tillid, der er givet til denne person eller organisation.<\/p>\n<p>Det er ogs\u00e5 vigtigt at tage i betragtning, at de data, der er skrevet til blockchain, bliver tilg\u00e6ngelige for alle. I den forstand er blockchain (is\u00e6r offentlig) ikke egnet til opbevaring af fortrolige oplysninger. Dog kan det faktum, at informationen i blockchain ikke kan \u00e6ndres, hj\u00e6lpe med at forhindre eller unders\u00f8ge forskellige former for svig.<\/p>\n<p>Decentraliserede applikationer p\u00e5 Ethereum vil v\u00e6re mere praktiske, hvis der betales for deres brug med kryptovaluta. Jo flere mennesker, der ejer kryptovaluta eller er villige til at k\u00f8be det, desto mere popul\u00e6rt bliver DApp applikationerne og smart contracts.<\/p>\n<p>Blandt de generelle problemer med blockchain, der vanskeligg\u00f8r dets praktiske anvendelse, kan man n\u00e6vne den begr\u00e6nsede hastighed af tilf\u00f8jelsen af nye blokke og de relativt h\u00f8je transaktionsomkostninger. Men teknologier inden for dette omr\u00e5de udvikler sig aktivt, og der er h\u00e5b om, at de tekniske problemer vil blive l\u00f8st med tiden.<\/p>\n<p>En anden udfordring er, at smart contracts p\u00e5 Ethereum blockchain fungerer i et isoleret milj\u00f8 af virtuelle maskiner og ikke har adgang til data fra den virkelige verden. Specifikt kan smart contract-programmet ikke selv l\u00e6se data fra websteder eller andre fysiske enheder (sensorer, kontakter osv.) og kan heller ikke levere data til eksterne enheder. Denne udfordring og m\u00e5der at l\u00f8se den p\u00e5 vil vi diskutere i lektionen om s\u00e5kaldte Oracle - informationsformidlere for smart contracts.<\/p>\n<p>Der er ogs\u00e5 juridiske begr\u00e6nsninger. I nogle lande, for eksempel, er det forbudt at bruge kryptovaluta som betalingsmiddel, men det er muligt at eje det som en form for digital aktiv ligesom v\u00e6rdipapirer. S\u00e5danne aktiver kan k\u00f8bes og s\u00e6lges p\u00e5 b\u00f8rsen. Uanset hvad, n\u00e5r man opretter et projekt, der arbejder med kryptovaluta, er det vigtigt at s\u00e6tte sig ind i lovgivningen i det land, som dit projekt er underlagt.<\/p>\n<h3>Hvordan en blockchain k\u00e6de dannes<\/h3>\n<p>\nSom vi allerede har n\u00e6vnt, er blockchain en simpel k\u00e6de af datablokke. F\u00f8rst dannes den f\u00f8rste blok i k\u00e6den, derefter tilf\u00f8jes den anden og s\u00e5 videre. Det antages, at transaktionsdata opbevares i blokkene og tilf\u00f8jes til den seneste blok.<\/p>\n<p>I fig. 1.1 har vi vist den enkleste version af blokr\u00e6kkef\u00f8lgen, hvor den f\u00f8rste blok henviser til den n\u00e6ste. <\/p>\n<p><img decoding=\"async\" alt=\"Bogen &quot;Oprettelse af smarte kontrakter ved hj\u00e6lp af Solidity til Ethereum blockchain. Praktisk vejledning&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/23ca04ba2c8914334032523d01bf8b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 1.1. Enkel blokr\u00e6kkef\u00f8lge<\/i><\/p>\n<p>I denne variant kan indholdet af enhver blok i k\u00e6den dog let forfalskes, da blokkene ikke indeholder nogen information til beskyttelse mod \u00e6ndringer. I betragtning af at blockchain er beregnet til brug af mennesker og virksomheder, som ikke har tillid til hinanden, kan man konkludere, at en s\u00e5dan m\u00e5de at gemme data p\u00e5 ikke er egnet til blockchain.<\/p>\n<p>Lad os beskytte blokkene mod forfalskninger. I det f\u00f8rste skridt vil vi fors\u00f8ge at beskytte hver blok med en kontrolsum (fig. 1.2).<\/p>\n<p><img decoding=\"async\" alt=\"Bogen &quot;Oprettelse af smarte kontrakter ved hj\u00e6lp af Solidity til Ethereum blockchain. Praktisk vejledning&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/141502accec14e868a9382c612cfc791.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 1.2. Tilf\u00f8jelse af databeskyttelse til blokkene med kontrolsum<\/i><\/p>\n<p>Nu kan en angriber ikke blot \u00e6ndre en blok, da den indeholder en kontrolsum for blokdataene. Kontrolsumkontrollen vil vise, at dataene er blevet \u00e6ndret.<\/p>\n<p>Til beregning af kontrolsummen kan man anvende en af hashfunktionerne, s\u00e5som MD-5, SHA-1, SHA-256 osv. Hashfunktioner beregner en bestemt v\u00e6rdi (f.eks. som en tekststreng med konstant l\u00e6ngde) som resultat af irreversible operationer p\u00e5 datablokken. Operationerne afh\u00e6nger af typen af hashfunktion. <\/p>\n<p>Selv en lille \u00e6ndring i indholdet af datablokken vil \u00e6ndre hashfunktionen. Ved at analysere v\u00e6rdien af hashfunktionen er det umuligt at genskabe datablokken, for hvilken den blev beregnet.<\/p>\n<p>Vil en s\u00e5dan beskyttelse v\u00e6re tilstr\u00e6kkelig? Desv\u00e6rre nej.<\/p>\n<p>I dette skema beskytter kontrolsummen (hashfunktionen) kun de enkelte blokke, men ikke selve k\u00e6den af blokke. Ved at kende algoritmen for hashfunktionen kan en angriber nemt \u00e6ndre indholdet af en blok. Der er heller ikke noget, der forhindrer dem i at slette blokke fra k\u00e6den eller tilf\u00f8je nye.<\/p>\n<p>For at beskytte hele k\u00e6den kan man opbevare hash af dataene fra den foreg\u00e5ende blok i hver blok sammen med dataene (fig. 1.3).<\/p>\n<p><img decoding=\"async\" alt=\"Bogen &quot;Oprettelse af smarte kontrakter ved hj\u00e6lp af Solidity til Ethereum blockchain. Praktisk vejledning&quot;\" src=\"\/wp-content\/uploads\/2019\/10\/f414ab67dbabc763c537a430e01ed065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 1.3. Tilf\u00f8jelse af hash af den forrige blok til blokdataene<\/i><\/p>\n<p>I denne ordning, for at \u00e6ndre en blok, skal man genberegne hash-funktionerne for alle efterf\u00f8lgende blokke. Det virker som om, der ikke er noget problem.<\/p>\n<p>I virkelige blockchains er der desuden skabt kunstige vanskeligheder for at tilf\u00f8je nye blokke - man bruger algoritmer, der kr\u00e6ver mange beregningsressourcer. Da det kr\u00e6ver at genberegne ikke kun denne blok, men alle efterf\u00f8lgende for at foretage \u00e6ndringer, vil det v\u00e6re ekstremt sv\u00e6rt.<\/p>\n<p>Lad os ogs\u00e5 huske, at data i blockchainen gemmes (dupliceres) p\u00e5 mange knudepunkter i netv\u00e6rket, dvs. der anvendes decentraliseret lagring. Dette g\u00f8r det ogs\u00e5 meget vanskeligere at forfalske en blok, da \u00e6ndringer skal foretages p\u00e5 alle knudepunkter i netv\u00e6rket.<\/p>\n<p>Da blokke indeholder information om den foreg\u00e5ende blok, kan man kontrollere indholdet af alle blokke i k\u00e6den.<\/p>\n<h3>Ethereum Blockchain<\/h3>\n<p>\nEthereum blockchain er en platform, hvorp\u00e5 man kan oprette distribuerede applikationer (DApp). I mods\u00e6tning til andre platforme tillader Ethereum brugen af s\u00e5kaldte smarte kontrakter (smart contracts), der er skrevet i programmeringssproget Solidity.<\/p>\n<p>Denne platform blev skabt i 2013 af Vitalik Buterin, grundl\u00e6ggeren af Bitcoin Magazine, og blev lanceret i 2015. Alt, hvad vi vil l\u00e6re eller g\u00f8re i vores kursus, relaterer sig netop til Ethereum blockchain og Solidity smart contracts.<\/p>\n<h3>Mining eller hvordan blokke bliver skabt<\/h3>\n<p>\nMining (mining) er en ret kompleks og ressourcekr\u00e6vende proces til at tilf\u00f8je nye blokke til blockchainen, og ikke bare 'udvinding af kryptovaluta'. Mining sikrer blockchainens funktionalitet, da det netop er denne proces, der st\u00e5r for tilf\u00f8jelsen af transaktioner i Ethereum blockchain.<\/p>\n<p>Mennesker og organisationer, der besk\u00e6ftiger sig med at tilf\u00f8je blokke, kaldes minearbejdere (miner).<br \/>\nSoftware (SP), der k\u00f8rer p\u00e5 minerknudepunkterne, fors\u00f8ger at finde en hash-parameter for den sidste blok, kaldet Nonce, for at f\u00e5 en bestemt v\u00e6rdi af hash-funktionen, som er angivet af netv\u00e6rket. Hash-algoritmen Ethash, der anvendes i Ethereum, tillader, at man kun f\u00e5r Nonce-v\u00e6rdien ved sekventiel brute force. <\/p>\n<p>Hvis minerens node finder den korrekte v\u00e6rdi af Nonce, er dette s\u00e5kaldt et bevis p\u00e5 arbejde (PoW, Proof-of-work). I dette tilf\u00e6lde, hvis blokken tilf\u00f8jes til Ethereum-netv\u00e6rket, modtager minerens en bestemt bel\u00f8nning i netv\u00e6rkets valuta \u2014 Ether. P\u00e5 tidspunktet for forberedelsen af vores bog er bel\u00f8nningen 5 Ether, men den vil blive reduceret over tid.<\/p>\n<p>Dermed sikrer Ethereum-minere netv\u00e6rkets funktion ved at tilf\u00f8je blokke og modtager kryptovaluta som betaling. P\u00e5 internettet kan du finde en masse information om minere og mining, men vi vil fokusere p\u00e5 at skabe Solidity-kontrakter og decentraliserede applikationer (DApp) p\u00e5 Ethereum-netv\u00e6rket.<\/p>\n<h3>Lesson Summary<\/h3>\n<p>\nI den f\u00f8rste lektion blev du introduceret til blockchain og l\u00e6rte, at det er en s\u00e6rligt sammensat sekvens af blokke. Indholdet af tidligere indspillede blokke kan ikke \u00e6ndres, da det ville kr\u00e6ve, at alle efterf\u00f8lgende blokke bliver omregnet p\u00e5 mange noder i netv\u00e6rket, hvilket kr\u00e6ver mange ressourcer og tid.<\/p>\n<p>Blockchain kan anvendes til at gemme resultaterne af udf\u00f8relsen af transaktioner. Dets hovedform\u00e5l er at organisere sikker udf\u00f8relse af transaktioner mellem parter (personer og organisationer), mellem hvilke der ikke er tillid. Du har l\u00e6rt, i hvilke specifikke erhvervsomr\u00e5der og inden for hvilke sektorer Blockchain Ethereum og Solidity smart contracts kan anvendes. Dette inkluderer banksektoren, ejendomregistrering, dokumenter osv.<\/p>\n<p>Du har ogs\u00e5 l\u00e6rt, at der kan opst\u00e5 forskellige problemer ved brug af blockchain. Dette inkluderer verifikation af information, der tilf\u00f8jes til blockchain, hastigheden af blockchain, omkostningerne ved transaktioner, problemet med dataudveksling mellem smart contracts og den virkelige verden samt potentielle angreb fra kriminelle, der har til hensigt at stj\u00e6le kryptovaluta fra brugernes konti.<\/p>\n<p>Vi har ogs\u00e5 kort omtalt mining som processen med at tilf\u00f8je nye blokke til blockchain. Mining er n\u00f8dvendig for at udf\u00f8re transaktioner. Dem, der deltager i mining, sikrer blockchainens funktionalitet og modtager kryptovaluta som bel\u00f8nning.<\/p>\n<p><b class=\"spoiler_title\">Lektion 2. Forberedelse af arbejdsomr\u00e5de i Ubuntu og Debian<\/b>Valg af operativsystem<br \/>\nInstallation af n\u00f8dvendige v\u00e6rkt\u00f8jer<br \/>\nInstallation af Geth og Swarm i Ubuntu<br \/>\nInstallation af Geth og Swarm i Debian<br \/>\nForberedelse.<br \/>\nDownload of the Go distribution<br \/>\nOps\u00e6tning af milj\u00f8variabler<br \/>\nChecking the Go version<br \/>\nInstalling Geth and Swarm<br \/>\nCreating a private blockchain<br \/>\n\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0430\u0439\u043b genesis.json<br \/>\nCreating a directory for work<br \/>\nCreating an account<br \/>\nStarting node initialization<br \/>\nNode launch parameters<br \/>\nConnecting to our node<br \/>\nManaging mining and checking balance<br \/>\nClosing the Geth console<br \/>\nLesson Summary<\/p>\n<p><b class=\"spoiler_title\">Lesson 3. Preparing the working environment on Raspberry Pi 3<\/b>Preparing Raspberry Pi 3 for work<br \/>\nInstalling Raspbian<br \/>\nInstalling updates<br \/>\nEnabling SSH access<br \/>\nSetting a static IP address<br \/>\nInstallation af n\u00f8dvendige v\u00e6rkt\u00f8jer<br \/>\nInstallation af Go<br \/>\nDownload of the Go distribution<br \/>\nOps\u00e6tning af milj\u00f8variabler<br \/>\nChecking the Go version<br \/>\nInstalling Geth and Swarm<br \/>\nCreating a private blockchain<br \/>\nChecking the account and balance<br \/>\nLesson Summary<\/p>\n<p><b class=\"spoiler_title\">Lesson 4. Accounts and transferring funds between accounts<\/b>Viewing and adding accounts<br \/>\nViewing the list of accounts<br \/>\nAdding an account<br \/>\ngeth account command parameters<br \/>\nAccount passwords<br \/>\nCryptocurrency in Ethereum<br \/>\nEthereum currency units<br \/>\nDetermining the current balance of our accounts<br \/>\nTransferring funds from one account to another<br \/>\nThe eth.sendTransaction method<br \/>\nViewing transaction status<br \/>\nTransaction receipt<br \/>\nLesson Summary<\/p>\n<p><b class=\"spoiler_title\">Lesson 5. Publishing the first contract<\/b>Smart contracts in Ethereum<br \/>\nExecuting a smart contract<br \/>\nEthereum Virtual Machine<br \/>\nIntegrated Development Environment Remix Solidity IDE<br \/>\nStarting compilation<br \/>\nCalling contract functions<br \/>\nPublishing the contract in a private network<br \/>\nObtaining the ABI definition and binary code of the contract<br \/>\nPublishing the contract<br \/>\nChecking the status of the contract publication transaction<br \/>\nCalling contract functions<br \/>\nBatch compiler solc<br \/>\nInstalling solc on Ubuntu<br \/>\nInstalling solc on Debian<br \/>\nCompiling the HelloSol contract<br \/>\nPublishing the contract<br \/>\nInstalling solc on Raspbian<br \/>\nLesson Summary<\/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 \/>\nInstallation on Ubuntu<br \/>\nInstallation on Debian<br \/>\nInstalling and running Ganache-cli<br \/>\nInstalling Web3<br \/>\nInstalling solc<br \/>\nInstalling Node.js on Raspbian<br \/>\nScript for retrieving the list of accounts in the console<br \/>\nScript for publishing a smart contract<br \/>\nStarting and obtaining parameters<br \/>\nGetting launch parameters<br \/>\nCompiling the contract<br \/>\nUnlocking the account<br \/>\nLoading ABI and binary code of the contract<br \/>\nEstimating the required gas amount<br \/>\nCreating an object and launching contract publication<br \/>\nRunning the contract publication script<br \/>\nCalling functions of the smart contract<br \/>\nIs it possible to update the published smart contract<br \/>\nWorking with Web3 version 1.0.x<br \/>\nRetrieving the list of accounts<br \/>\nPublishing the contract<br \/>\nCalling contract functions<br \/>\nTransferring funds from one account to another<br \/>\nTransferring funds to the contract account<br \/>\nUpdating the HelloSol smart contract<br \/>\nCreating a script to check the account balance<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 \/>\nRefilling the smart contract account<br \/>\nLesson Summary<\/p>\n<p><b class=\"spoiler_title\">Lesson 7. Introduction to Truffle<\/b>Installing Truffle<br \/>\nCreating the HelloSol project<br \/>\nCreating the project directory and files<br \/>\nKatalog over kontrakter<br \/>\nKatalog over migrationer<br \/>\nKatalog over test<br \/>\n\u0424\u0430\u0439\u043b truffle-config.js<br \/>\nCompiling the HelloSol contract<br \/>\nStart af offentligg\u00f8relse af kontrakt<br \/>\nKald af funktionerne i kontrakten HelloSol i Truffle-inds\u00e6ttelse<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 \/>\nInstallation af truffle-contract modulet<br \/>\nKald af funktionerne getValue og getString i kontrakten<br \/>\nKald af funktionerne setValue og setString i kontrakten<br \/>\n\u00c6ndring af kontrakt og genoffentligg\u00f8relse<br \/>\nWorking with Web3 version 1.0.x<br \/>\nVi foretager \u00e6ndringer i smart-kontrakten HelloSol<br \/>\nScripts til at kalde metode i kontrakten<br \/>\nTestning i Truffle<br \/>\nTest i Solidity<br \/>\nTest i JavaScript<br \/>\nLesson Summary<\/p>\n<p><b class=\"spoiler_title\">Lektion 8. Datatyper i Solidity<\/b>Kontrakt til studiet af datatyper<br \/>\nLogiske datatyper<br \/>\nUsignerede heltal og signede heltal<br \/>\nTal med fast decimal<br \/>\nAdresse<br \/>\nVariabler af komplekse typer<br \/>\nArrays med fast st\u00f8rrelse<br \/>\nDynamiske arrays<br \/>\nOplistning<br \/>\nStrukturer<br \/>\nMapping-diktion\u00e6rer<br \/>\nLesson Summary<\/p>\n<p><b class=\"spoiler_title\">Lektion 9. Migration af kontrakter til et privat netv\u00e6rk og netv\u00e6rket Rinkeby<\/b>Offentligg\u00f8relse af kontrakt fra Truffle til privat Geth-netv\u00e6rk<br \/>\nForberedelse af knuden til privat netv\u00e6rk<br \/>\nForberedelse af kontrakt til drift<br \/>\nKompilering og migration af kontrakt til Truffle-netv\u00e6rket<br \/>\nK\u00f8rsel af migration i lokal geth-netv\u00e6rk<br \/>\nVi udvinder artefakter fra Truffle<br \/>\nOffentligg\u00f8relse af kontrakt fra Truffle til testnetv\u00e6rket Rinkeby<br \/>\nForberedelse af Geth-knuden til at arbejde med Rinkeby<br \/>\nSynkronisering af knude<br \/>\nTilf\u00f8jelse af konti<br \/>\nP\u00e5fyldning af Rinkeby-konto med ether<br \/>\nK\u00f8rsel af kontraktsmigration til Rinkeby-netv\u00e6rket<br \/>\nVisning af information om kontrakt i Rinkeby-netv\u00e6rket<br \/>\nTruffle-konsol til Rinkeby-netv\u00e6rket<br \/>\nEn enklere m\u00e5de at kalde funktionerne i kontrakten<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 \/>\nOverf\u00f8rsel af midler mellem konti i Truffle-konsollen for Rinkeby<br \/>\nLesson Summary<\/p>\n<p><b class=\"spoiler_title\">Lektion 10. Decentraliseret datalagring med Ethereum Swarm<\/b>Hvordan Ethereum Swarm fungerer<br \/>\nInstallation og opstart af Swarm<br \/>\nOperationer med filer og mapper<br \/>\nUpload af fil til Ethereum Swarm<br \/>\nL\u00e6sning af fil fra Ethereum Swarm<br \/>\nVisning af manifestet for den uploadede fil<br \/>\nUpload af mapper med undermapper<br \/>\nL\u00e6sning af fil fra den uploadede mappe<br \/>\nBrug af offentlig gateway til 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-modulet Net::Ethereum::Swarm<br \/>\nInstallation af modulet Net::Ethereum::Swarm<br \/>\nSkrivning og l\u00e6sning af data<br \/>\nLesson Summary<\/p>\n<p><b class=\"spoiler_title\">Lektion 11. Web3.py-ramme til arbejde med Ethereum p\u00e5 Python<\/b>Installation af Web3.py<br \/>\nOpdatering og installation af n\u00f8dvendige pakker<br \/>\nInstallation af modulet easysolc<br \/>\nOffentligg\u00f8relse af kontrakt ved hj\u00e6lp af Web3.py<br \/>\nCompiling the contract<br \/>\nForbindelse til udbyderen<br \/>\nUdf\u00f8relse af offentligg\u00f8relse af kontrakt<br \/>\nGem adresse og abi for kontrakt i fil<br \/>\nRunning the contract publication script<br \/>\nKald af metoder i kontrakten<br \/>\nL\u00e6sning af adressen og abi for kontrakt fra JSON-fil<br \/>\nForbindelse til udbyderen<br \/>\nOprettelse af kontraktobjekt<br \/>\nKald af metoder i kontrakten<br \/>\nTruffle og Web3.py<br \/>\nLesson Summary<\/p>\n<p><b class=\"spoiler_title\">Lektion 12. Orakler<\/b>Kan smart-kontrakten stole p\u00e5 data fra den eksterne verden<br \/>\nOrakler som informationsformidlere i blockchain<br \/>\nDatakilde<br \/>\nKode til at repr\u00e6sentere data fra kilden<br \/>\nOrakel til at registrere valutakurser i blockchain<br \/>\nKontrakt USDRateOracle<br \/>\nOpdatering af valutakurs i smart kontrakten<br \/>\nBrug af Web Socket-udbyder<br \/>\nVent p\u00e5 RateUpdate-begivenhed<br \/>\nBehandling af RateUpdate-begivenhed<br \/>\nInitiering af opdatering af data i smart kontrakten<br \/>\nLesson Summary<\/p>\n<p>Kilde: <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\/da\/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=\"da_DK\" \/>\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\/da\/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\udd47Bogen \u00abOprettelse af smart kontrakter i Solidity til Ethereum blockchain. Praktisk vejledning\u00bb | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/da\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/39018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=39018"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/39018\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/29275"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=39018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=39018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=39018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}