{"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\/it\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","title":{"rendered":"Libro \u00abCreazione di smart contract Solidity per blockchain Ethereum. Guida pratica\u00bb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Libro \u00abCreazione di smart contract Solidity per blockchain Ethereum. Guida pratica\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/9549e708e99fef6892045ff854231fa7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPer oltre un anno ho lavorato al libro \"Creazione di smart contract Solidity per la blockchain Ethereum. Guida pratica\", e ora questo lavoro \u00e8 completato, e il libro <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">\u00e8 pubblicato ed \u00e8 disponibile su Litres<\/a><\/noindex>.<\/p>\n<p>Spero che il mio libro aiuti a iniziare rapidamente a creare smart contract Solidity e applicazioni decentralizzate DApp per la blockchain Ethereum. Si compone di 12 lezioni con esercizi pratici. Completandoli, il lettore sar\u00e0 in grado di creare i propri nodi locali Ethereum, pubblicare smart contract e invocare i loro metodi, scambiare dati tra il mondo reale e gli smart contract tramite oracoli, e lavorare con la rete di test di debug Rinkeby. <\/p>\n<p>Il libro \u00e8 rivolto a tutti coloro che sono interessati alle tecnologie avanzate nel campo delle blockchain e desiderano acquisire rapidamente le conoscenze necessarie per svolgere un lavoro interessante e promettente.<\/p>\n<p>Di seguito troverai l'indice e il primo capitolo del libro (anche su <noindex><a rel=\"nofollow\" href=\"https:\/\/www.litres.ru\/aleksandr-frolov-198\/sozdanie-smart-kontraktov-solidity-dlya-blokcheyna-et\/\">Litres<\/a><\/noindex> sono disponibili estratti del libro). Spero di ricevere feedback, commenti e suggerimenti. Cercher\u00f2 di tenerne conto nella preparazione della prossima edizione del libro.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<b class=\"spoiler_title\">Indice<\/b><b class=\"spoiler_title\">Introduzione<\/b>Il nostro libro \u00e8 pensato per coloro che vogliono non solo comprendere i principi di funzionamento della blockchain Ethereum, ma anche acquisire competenze pratiche nella creazione di applicazioni decentralizzate DApp utilizzando il linguaggio di programmazione Solidity per questa rete.<\/p>\n<p>Questo libro \u00e8 meglio non solo leggerlo, ma anche lavorarci, eseguendo gli esercizi pratici descritti nelle lezioni. Per lavorare avrai bisogno di un computer locale, di un server virtuale o cloud con sistema operativo Debian o Ubuntu installato. Inoltre, per svolgere molti degli esercizi, puoi utilizzare Raspberry Pi.<\/p>\n<p><b>Nella prima lezione <\/b>esamineremo i principi di funzionamento della blockchain Ethereum e la terminologia di base, oltre a spiegare dove \u00e8 possibile utilizzare questa blockchain. <\/p>\n<p>Obiettivo <b>nella seconda lezione<\/b> dovremo creare un nodo di blockchain Ethereum privato per ulteriori lavori all'interno di questo corso su server Ubuntu e Debian. Esamineremo le peculiarit\u00e0 dell'installazione delle utilit\u00e0 principali, come geth, che gestisce il nodo della nostra blockchain, e il demone dello storage decentralizzato swarm.<\/p>\n<p><b>Nella terza lezione<\/b> ti insegner\u00e0 a condurre esperimenti con Ethereum su un economico microcomputer Raspberry Pi. Installerai il sistema operativo (OS) Rasberian su Raspberry Pi, l'utilit\u00e0 Geth, che consente il funzionamento di un nodo blockchain, e il demone di archiviazione decentralizzata Swarm.<\/p>\n<p><b>Quarto lezione<\/b> \u00e8 dedicata agli account e alle unit\u00e0 di criptovaluta nella rete Ethereum, nonch\u00e9 ai modi per trasferire fondi da un account all'altro tramite la console Geth. Imparerai a creare account, avviare transazioni di trasferimento fondi, ottenere lo stato di una transazione e la sua ricevuta.<\/p>\n<p><b>Nella quinta lezione<\/b> verrai introdotto ai contratti intelligenti nella rete Ethereum e scoprirai come vengono eseguiti dalla macchina virtuale Ethereum. <\/p>\n<p>Creerai e pubblicherai nella rete privata Ethereum il tuo primo contratto intelligente e imparerai a invocare le sue funzioni. Per fare ci\u00f2 utilizzerai l'ambiente di sviluppo Remix Solidity IDE. Inoltre, imparerai a installare e utilizzare il compilatore batch solc.<br \/>\nInoltre, parleremo del cosiddetto Interfaccia Binaria dell'Applicazione (ABI) e ti insegneremo a usarla.<\/p>\n<p><b>Sesta lezione<\/b> \u00e8 dedicata alla creazione di script JavaScript che funzionano sotto Node.js ed eseguono operazioni con contratti intelligenti Solidity.<\/p>\n<p>Installerai Node.js su OS Ubuntu, Debian e Rasberian, scriverai script per pubblicare un contratto intelligente nella rete locale Ethereum e invocare le sue funzioni. <\/p>\n<p>Inoltre, imparerai a trasferire fondi tra account normali utilizzando script, cos\u00ec come a accreditare i fondi sugli account dei contratti intelligenti.<\/p>\n<p><b>Nella settima lezione<\/b> imparerai a installare e utilizzare il popolare ambiente integrato Truffle, utilizzato tra gli sviluppatori di contratti intelligenti Solidity. Imparerai a creare script JavaScript che invocano funzioni dei contratti utilizzando il modulo truffle-contract e testerai il tuo contratto intelligente con gli strumenti di Truffle.<\/p>\n<p><b>Ottava lezione<\/b> \u00e8 dedicata ai tipi di dati Solidity. Scriverai contratti intelligenti che lavorano con tipi di dati come numeri interi con segno e senza segno, numeri decimali, stringhe, indirizzi, variabili di tipo complesso, array, enumerazioni, strutture e dizionari.<\/p>\n<p><b>Nella nona lezione<\/b> Ti avvicinerai un passo ulteriore alla creazione di smart contract per la rete principale di Ethereum. Imparerai a pubblicare contratti utilizzando Truffle in una rete privata Geth, cos\u00ec come nella rete di test Rinkeby. Il debugging di uno smart contract nella rete Rinkeby \u00e8 molto utile prima della sua pubblicazione sulla rete principale: l\u00ec tutto \u00e8 quasi reale, ma gratuito.<\/p>\n<p>Nel corso della lezione creerai un nodo della rete di test Rinkeby, lo finanzierai e pubblicherai uno smart contract.<\/p>\n<p><b>Lezione 10<\/b> \u00e8 dedicata ai data store distribuiti di Ethereum Swarm. Utilizzando i data store distribuiti, risparmi sui costi di archiviazione dei dati di grandi dimensioni sulla blockchain di Ethereum. <\/p>\n<p>In questa lezione creerai un archivio locale Swarm, eseguirai operazioni di scrittura e lettura di file, oltre a directory con file. Successivamente imparerai a lavorare con il gateway pubblico di Swarm, scriverai script per interagire con Swarm da Node.js e anche utilizzando il modulo Perl Net::Ethereum::Swarm.<\/p>\n<p><b>L'obiettivo della lezione 11<\/b> \u00e8 padroneggiare il lavoro con gli smart contract Solidity utilizzando il popolare linguaggio di programmazione Python e il framework Web3.py. Installerai questo framework, scriverai script per compilare e pubblicare uno smart contract, cos\u00ec come per invocare le sue funzioni. In questo caso, Web3.py sar\u00e0 utilizzato sia da solo sia in combinazione con l'ambiente di sviluppo integrato Truffle.<\/p>\n<p><b>Nella lezione 12<\/b> imparerai a trasmettere dati tra smart contract e il mondo reale utilizzando gli oracoli. Questo ti sar\u00e0 utile per ottenere dati da siti web, dispositivi IoT, vari strumenti e sensori, e inviare dati da smart contract a questi dispositivi. Nella parte pratica della lezione, creerai un oracolo e uno smart contract che riceve il tasso di cambio attuale USD in rubli dal sito della Banca Centrale della Federazione Russa.<\/p>\n<p><b class=\"spoiler_title\">Lezione 1. Breve introduzione alla blockchain e alla rete Ethereum<\/b><b>Obiettivo della lezione:<\/b> familiarizzare con i principi del funzionamento della blockchain di Ethereum, i suoi ambiti di applicazione e la terminologia di base.<br \/>\n<b>Attivit\u00e0 pratiche:<\/b> in questa lezione non sono previste.<\/p>\n<p>Oggi \u00e8 difficile trovare uno sviluppatore di software che non abbia mai sentito parlare della tecnologia blockchain, delle criptovalute, di Bitcoin, dell'ICO (offerta iniziale di monete), degli smart contract e di altri concetti e termini relativi alla blockchain.<\/p>\n<p>La tecnologia blockchain apre nuovi mercati e crea posti di lavoro per i programmatori. Se apprendi tutte le sfumature delle tecnologie delle criptovalute e dei contratti intelligenti, non dovresti avere problemi ad applicare queste conoscenze nella pratica.<\/p>\n<p>Va detto che ci sono molte speculazioni attorno alle criptovalute e ai blockchain. Lasceremo da parte le discussioni sui cambiamenti dei corsi delle criptovalute, sulla creazione di piramidi, sulle complessit\u00e0 della legislazione delle criptovalute, e cos\u00ec via. Nel nostro corso di formazione ci concentreremo principalmente sugli aspetti tecnici dell'applicazione dei contratti intelligenti nel blockchain di Ethereum (Ether) e nello sviluppo delle cosiddette applicazioni decentralizzate (Distributed Application, DApp).<\/p>\n<h3>Che cos'\u00e8 il blockchain<\/h3>\n<p>\nIl blockchain (Blockchain, Block Chain) \u00e8 una catena di blocchi di dati collegati tra loro in un certo modo. All'inizio della catena c'\u00e8 il primo blocco, chiamato blocco primario (genesis block) o blocco di genesi. Segue il secondo, poi il terzo e cos\u00ec via.<\/p>\n<p>Tutti questi blocchi di dati vengono automaticamente duplicati su numerosi nodi della rete blockchain. In questo modo si garantisce un'archiviazione decentralizzata dei dati del blockchain. <br \/>\nPuoi immaginare il sistema blockchain come un gran numero di nodi (server fisici o virtuali) connessi in rete che replicano tutte le modifiche nella catena di blocchi di dati. \u00c8 come un gigantesco computer multi-server, in cui i nodi di questo computer (server) possono essere sparsi in tutto il mondo. E anche tu puoi aggiungere il tuo computer alla rete blockchain. <\/p>\n<h4>Database distribuito<\/h4>\n<p>\nIl blockchain pu\u00f2 essere visto come un database distribuito, replicato su tutti i nodi della rete blockchain. In teoria, il blockchain sar\u00e0 operante finch\u00e9 almeno un nodo, che memorizza tutti i blocchi del blockchain, \u00e8 attivo.<\/p>\n<h4>Registro dei dati distribuito<\/h4>\n<p>\nIl blockchain pu\u00f2 essere visto come un registro distribuito di dati e operazioni (transazioni). Un altro nome per questo registro \u00e8 libro mastro. <\/p>\n<p>Nel registro distribuito \u00e8 possibile aggiungere dati, ma non \u00e8 possibile modificarli o eliminarli. Questa impossibilit\u00e0 \u00e8 raggiunta, in particolare, attraverso l'applicazione di algoritmi crittografici, algoritmi speciali per l'aggiunta di blocchi nella catena e la memorizzazione decentralizzata dei dati.<\/p>\n<p>Durante l'aggiunta di blocchi e l'esecuzione di operazioni (transazioni) vengono utilizzate chiavi private e pubbliche. Queste limitano gli utenti della blockchain, concedendo loro accesso solo ai propri blocchi di dati.<\/p>\n<h4>Transazioni<\/h4>\n<p>\nLa blockchain memorizza informazioni sulle operazioni (transazioni) in blocchi. Le transazioni vecchie, gi\u00e0 completate, non possono essere annullate o modificate. Le nuove transazioni vengono memorizzate in nuovi blocchi aggiunti.<\/p>\n<p>In questo modo, tutta la cronologia delle transazioni pu\u00f2 essere registrata inalterata nella blockchain. Pertanto, la blockchain pu\u00f2 essere utilizzata, ad esempio, per una memorizzazione sicura delle operazioni bancarie, delle informazioni sul copyright, della storia delle modifiche dei proprietari di beni immobili, ecc.<\/p>\n<p>La blockchain di Ethereum contiene i cosiddetti stati del sistema. Man mano che vengono eseguite le transazioni, lo stato cambia dallo stato iniziale a quello attuale. Le transazioni vengono registrate in blocchi.<\/p>\n<h4>Blockchain pubbliche e private<\/h4>\n<p>\n\u00c8 importante notare che quanto appena detto \u00e8 vero solo per le cosiddette reti blockchain pubbliche, che non possono essere controllate da singole persone fisiche o giuridiche, organizzazioni governative o stati. <br \/>\nLe cosiddette reti blockchain private sono sotto il completo controllo dei loro creatori, e qui \u00e8 possibile fare di tutto, ad esempio, sostituire completamente tutti i blocchi della catena.<\/p>\n<h4>Applicazioni pratiche della blockchain<\/h4>\n<p>\nA cosa pu\u00f2 servire la blockchain?<\/p>\n<p>In breve, la blockchain consente di eseguire operazioni (transazioni) in modo sicuro tra persone o aziende che non si fidano l'una dell'altra. I dati registrati nella blockchain (transazioni, dati personali, documenti, attestati, contratti, fatture, ecc.) non possono essere falsificati o sostituiti dopo la registrazione. Pertanto, sulla base della blockchain \u00e8 possibile creare, ad esempio, registri distribuiti affidabili di vari documenti.<\/p>\n<p>Certo, sapete che le criptovalute sono sistemi basati su blockchain progettati per sostituire il denaro cartaceo. Il denaro cartaceo \u00e8 anche chiamato denaro fiat (da Fiat Money).<br \/>\nLa blockchain garantisce la conservazione e l'immutabilit\u00e0 delle transazioni registrate nei blocchi, motivo per cui pu\u00f2 essere utilizzata per creare sistemi di criptovaluta. Contiene la cronologia completa del trasferimento di crypto-fondi tra diversi utenti (account), ed ogni operazione pu\u00f2 essere tracciata.<\/p>\n<p>Sebbene le operazioni all'interno dei sistemi di criptovaluta possano essere anonime, il prelievo di criptovaluta e il suo scambio con denaro fiat portano solitamente alla rivelazione dell'identit\u00e0 del proprietario dell'attivo criptovalutario. <\/p>\n<p>I cosiddetti smart contract, che sono software che operano sulla rete Ethereum, consentono di automatizzare il processo di conclusione degli affari e di monitorarne l'esecuzione. Questo \u00e8 particolarmente efficace quando il pagamento per l'affare avviene in criptovaluta Ether.<\/p>\n<p>La blockchain Ethereum e gli smart contract Ethereum, scritti nel linguaggio di programmazione Solidity, possono essere utilizzati, ad esempio, nei seguenti settori:<\/p>\n<ul>\n<li>alternativa alla notarizzazione dei documenti;<\/li>\n<li>conservazione del registro degli immobili e delle informazioni sulle operazioni immobiliari;<\/li>\n<li>conservazione delle informazioni sui diritti d'autore riguardanti le opere di propriet\u00e0 intellettuale (libri, immagini, opere musicali, ecc.);<\/li>\n<li>creazione di sistemi di votazione indipendente;<\/li>\n<li>settore finanziario e bancario;<\/li>\n<li>logistica su scala internazionale, tracciamento del movimento delle merci;<\/li>\n<li>conservazione dei dati personali come alternativa al sistema di identificazione;<\/li>\n<li>transazioni sicure nel settore commerciale;<\/li>\n<li>conservazione dei risultati degli esami medici e della storia delle procedure prescritte.<\/li>\n<\/ul>\n<p><\/p>\n<h4>Problemi con la blockchain<\/h4>\n<p>\nMa, naturalmente, non \u00e8 tutto cos\u00ec semplice come potrebbe sembrare! <\/p>\n<p>Ci sono problemi con la verifica dei dati prima della loro aggiunta alla blockchain (ad esempio, sono autentici?), problemi di sicurezza del software di sistema e applicativo utilizzato per lavorare con la blockchain, problemi relativi alla possibilit\u00e0 di utilizzare metodi di ingegneria sociale per rubare l'accesso ai portafogli di criptovaluta e cos\u00ec via.<\/p>\n<p>Ancora una volta, se parliamo non di una blockchain pubblica, i cui nodi sono distribuiti in tutto il mondo, ma di una blockchain privata, di propriet\u00e0 di una persona o di un'organizzazione, il livello di fiducia qui non sar\u00e0 superiore al livello di fiducia in quella persona o organizzazione.<\/p>\n<p>Bisogna anche considerare che i dati registrati nella blockchain diventano accessibili a tutti. In questo senso, la blockchain (soprattutto quella pubblica) non \u00e8 adatta per memorizzare informazioni riservate. Tuttavia, il fatto che le informazioni nella blockchain non possano essere modificate pu\u00f2 aiutare a prevenire o indagare vari tipi di frodi.<\/p>\n<p>Le applicazioni decentralizzate di Ethereum saranno utili se si paga per il loro utilizzo con criptovaluta. Pi\u00f9 persone possiedono criptovaluta o sono disposte ad acquistarla, maggiore sar\u00e0 la popolarit\u00e0 delle applicazioni DApp e dei contratti smart.<\/p>\n<p>Tra i problemi generali della blockchain che ostacolano la sua applicazione pratica si possono citare la limitata velocit\u00e0 di aggiunta di nuovi blocchi e il costo relativamente elevato delle transazioni. Ma le tecnologie in questo campo stanno evolvendo attivamente, e ci sono speranze che i problemi tecnici vengano risolti nel tempo.<\/p>\n<p>Un altro problema \u00e8 che i contratti smart della blockchain di Ethereum operano in un ambiente isolato di macchine virtuali e non hanno accesso ai dati del mondo reale. In particolare, il programma del contratto smart non pu\u00f2 leggere autonomamente i dati da siti internet o da dispositivi fisici (sensori, contatti, ecc.), n\u00e9 pu\u00f2 inviare dati a dispositivi esterni. Questo problema e le modalit\u00e0 per risolverlo saranno affrontati nella lezione dedicata ai cosiddetti Oracoli \u2014 intermediari informativi dei contratti smart.<\/p>\n<p>Ci sono anche limitazioni legislative. In alcuni paesi, ad esempio, \u00e8 vietato utilizzare la criptovaluta come mezzo di pagamento, ma \u00e8 possibile possederla come un certo attivo digitale, simile a titoli. Tali attivi possono essere comprati e venduti in borsa. In ogni caso, quando si crea un progetto che lavora con criptovalute, \u00e8 necessario informarsi sulla legislazione del paese sotto la cui giurisdizione rientra il proprio progetto.<\/p>\n<h3>Come si forma una catena di blockchain<\/h3>\n<p>\nCome abbiamo gi\u00e0 detto, la blockchain \u00e8 una semplice catena di blocchi di dati. Prima viene formato il primo blocco di questa catena, poi ad esso viene aggiunto il secondo e cos\u00ec via. Si presume che i dati delle transazioni siano memorizzati nei blocchi e aggiunti all'ultimo blocco.<\/p>\n<p>Nella Fig. 1.1 abbiamo mostrato il pi\u00f9 semplice esempio di sequenza di blocchi, in cui il primo blocco fa riferimento al successivo. <\/p>\n<p><img decoding=\"async\" alt=\"Libro \u00abCreazione di smart contract Solidity per blockchain Ethereum. Guida pratica\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/23ca04ba2c8914334032523d01bf8b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 1.1. Sequenza semplice di blocchi<\/i><\/p>\n<p>Tuttavia, in questo caso, \u00e8 molto facile falsificare il contenuto di qualsiasi blocco della catena, poich\u00e9 i blocchi non contengono alcuna informazione per proteggere dalle modifiche. Considerando che la blockchain \u00e8 destinata a essere utilizzata da persone e aziende che non si fidano l'una dell'altra, si pu\u00f2 concludere che questo modo di memorizzare i dati non \u00e8 adatto per la blockchain.<\/p>\n<p>Occupiamoci ora della protezione dei blocchi dalla falsificazione. Nella prima fase, tenteremo di proteggere ogni blocco con un checksum (Fig. 1.2).<\/p>\n<p><img decoding=\"async\" alt=\"Libro \u00abCreazione di smart contract Solidity per blockchain Ethereum. Guida pratica\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/141502accec14e868a9382c612cfc791.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 1.2. Aggiunta di protezione dei dati dei blocchi con un checksum<\/i><\/p>\n<p>Ora un malintenzionato non pu\u00f2 semplicemente modificare un blocco, poich\u00e9 contiene un checksum dei dati del blocco. Il controllo del checksum mostrer\u00e0 che i dati sono stati modificati.<\/p>\n<p>Per calcolare il checksum, \u00e8 possibile utilizzare una delle funzioni di hashing, come MD-5, SHA-1, SHA-256, ecc. Le funzioni di hash calcolano un certo valore (ad esempio, sotto forma di stringa di testo di lunghezza fissa) a seguito di operazioni irreversibili sui dati del blocco. Le operazioni dipendono dal tipo di funzione di hash. <\/p>\n<p>Anche con una piccola modifica del contenuto del blocco di dati, il valore della funzione di hash cambier\u00e0. Analizzando il valore della funzione di hash, non \u00e8 possibile ricostruire il blocco di dati per il quale \u00e8 stata calcolata.<\/p>\n<p>Sar\u00e0 sufficiente tale protezione? Sfortunatamente, no.<\/p>\n<p>In questo schema, il checksum (funzione di hash) protegge solo singoli blocchi, ma non l'intera catena di blocchi. Conoscendo l'algoritmo di calcolo della funzione di hash, un malintenzionato potrebbe facilmente sostituire il contenuto di un blocco. Inoltre, nulla gli impedirebbe di eliminare blocchi dalla catena o aggiungerne di nuovi.<\/p>\n<p>Per proteggere l'intera catena in generale, \u00e8 possibile memorizzare in ogni blocco, insieme ai dati, anche l'hash dei dati del blocco precedente (Fig. 1.3).<\/p>\n<p><img decoding=\"async\" alt=\"Libro \u00abCreazione di smart contract Solidity per blockchain Ethereum. Guida pratica\u00bb\" src=\"\/wp-content\/uploads\/2019\/10\/f414ab67dbabc763c537a430e01ed065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Fig. 1.3. Aggiunta all'interno del blocco dei dati dell'hash del blocco precedente<\/i><\/p>\n<p>In this scheme, to change any block, it is necessary to recalculate the hash functions of all subsequent blocks. It might seem, what\u2019s the problem?<\/p>\n<p>In real blockchains, additional artificial difficulties have been created for adding new blocks \u2014 algorithms that require a lot of computational resources are used. Considering that to make changes to a block, it is necessary to recalculate not just that block but all subsequent ones, doing so will be extremely difficult.<\/p>\n<p>Let's also remember that blockchain data is stored (duplicated) on numerous nodes of the network, i.e., decentralized storage is used. This significantly complicates the forgery of a block, as changes must be made to all nodes in the network.<\/p>\n<p>Since blocks store information about the previous block, it is possible to check the contents of all blocks in the chain.<\/p>\n<h3>Blockchain Ethereum<\/h3>\n<p>\nEthereum blockchain is a platform on which distributed applications (DApps) can be created. Unlike other platforms, Ethereum allows the use of so-called smart contracts, written in the programming language Solidity.<\/p>\n<p>This platform was created in 2013 by Vitalik Buterin, the founder of Bitcoin Magazine, and launched in 2015. Everything we will study or do in our course is related specifically to the Ethereum blockchain and Solidity smart contracts.<\/p>\n<h3>Mining or how blocks are created<\/h3>\n<p>\nMining represents a rather complex and resource-intensive process of adding new blocks to the blockchain, rather than 'extracting cryptocurrencies.' Mining ensures the operability of the blockchain, as this process is responsible for adding transactions to the Ethereum blockchain.<\/p>\n<p>People and organizations engaged in adding blocks are called miners.<br \/>\nThe software operating on miners' nodes tries to find a hashing parameter called Nonce for the last block to achieve a specific value of the hash function specified by the network. The hash algorithm Ethash, used in Ethereum, allows obtaining the Nonce value only through sequential brute force. <\/p>\n<p>Se un nodo minerario trova il valore corretto del Nonce, ci\u00f2 costituisce la cosiddetta prova di lavoro (PoW, Proof-of-work). In tal caso, se il blocco viene aggiunto alla rete Ethereum, il minerario riceve una ricompensa in valuta di rete \u2014 Ether. Al momento della preparazione del nostro libro, la ricompensa \u00e8 di 5 Ether, tuttavia nel tempo verr\u00e0 ridotta.<\/p>\n<p>In questo modo, i minerari di Ethereum garantiscono il funzionamento della rete, aggiungendo blocchi e ricevendo in cambio denaro in criptovaluta. In internet puoi trovare molte informazioni sui miner e sul mining, mentre noi ci concentreremo sulla creazione di contratti Solidity e applicazioni decentralizzate DApp nella rete Ethereum.<\/p>\n<h3>Sommario della lezione<\/h3>\n<p>\nNella prima lezione hai conosciuto la blockchain e hai scoperto che si tratta di una sequenza di blocchi organizzatasi in un modo particolare. Il contenuto dei blocchi registrati in precedenza non pu\u00f2 essere modificato, poich\u00e9 per farlo sarebbe necessario ricalcolare tutti i blocchi successivi su molti nodi della rete, richiedendo un enorme capitale di risorse e tempo.<\/p>\n<p>La blockchain pu\u00f2 essere utilizzata per memorizzare i risultati delle transazioni. La sua funzione principale \u00e8 quella di organizzare l'esecuzione sicura delle transazioni tra le parti (persone e organizzazioni) tra cui non esiste fiducia. Hai appreso in quali settori specifici delle attivit\u00e0 commerciali e in quali ambiti si pu\u00f2 utilizzare la blockchain Ethereum e i contratti intelligenti Solidity. Questi includono il settore bancario, la registrazione dei diritti di propriet\u00e0, dei documenti, ecc.<\/p>\n<p>Hai anche appreso che possono sorgere vari problemi nell'uso della blockchain. Questi includono problemi di verifica delle informazioni aggiunte alla blockchain, la velocit\u00e0 di funzionamento della blockchain, i costi delle transazioni, il problema dello scambio di dati tra contratti intelligenti e il mondo reale, nonch\u00e9 potenziali attacchi di hacker diretti al furto di criptovalute dagli account degli utenti.<\/p>\n<p>Abbiamo anche discusso brevemente del mining come processo per aggiungere nuovi blocchi alla blockchain. Il mining \u00e8 necessario per l'esecuzione delle transazioni. Coloro che praticano il mining assicurano la funzionalit\u00e0 della blockchain e ricevono in cambio una ricompensa in criptovaluta.<\/p>\n<p><b class=\"spoiler_title\">Lezione 2. Preparazione dell'ambiente di lavoro su OS Ubuntu e Debian<\/b>Scelta del sistema operativo<br \/>\nInstallazione degli strumenti necessari<br \/>\nInstallazione di Geth e Swarm su Ubuntu<br \/>\nInstallazione di Geth e Swarm su Debian<br \/>\nPreparazione preliminare<br \/>\nCaricamento del pacchetto Go<br \/>\nImpostazione delle variabili d'ambiente<br \/>\nControllo della versione di Go<br \/>\nInstallazione di Geth e Swarm<br \/>\nCreiamo una blockchain privata<br \/>\n\u0413\u043e\u0442\u043e\u0432\u0438\u043c \u0444\u0430\u0439\u043b genesis.json<br \/>\nCreiamo una cartella per lavorare<br \/>\nCreiamo un account<br \/>\nAvviamo l'inizializzazione del nodo<br \/>\nOpzioni di avvio del nodo<br \/>\nColleghiamoci al nostro nodo<br \/>\nGestione del mining e controllo del saldo<br \/>\nTermina la console Geth<br \/>\nSommario della lezione<\/p>\n<p><b class=\"spoiler_title\">Lezione 3. Preparazione dell'ambiente di lavoro su Raspberry Pi 3<\/b>Preparazione del Raspberry Pi 3 per il lavoro<br \/>\nInstallazione di Raspbian<br \/>\nInstallazione degli aggiornamenti<br \/>\nAbilitazione dell'accesso SSH<br \/>\nImpostazione di un indirizzo IP statico<br \/>\nInstallazione degli strumenti necessari<br \/>\nInstallazione di Go<br \/>\nCaricamento del pacchetto Go<br \/>\nImpostazione delle variabili d'ambiente<br \/>\nControllo della versione di Go<br \/>\nInstallazione di Geth e Swarm<br \/>\nCreiamo una blockchain privata<br \/>\nVerifica dell'account e del saldo<br \/>\nSommario della lezione<\/p>\n<p><b class=\"spoiler_title\">Lezione 4. Account e trasferimenti di fondi tra account<\/b>Visualizzazione e aggiunta di account<br \/>\nVisualizzazione dell'elenco degli account<br \/>\nAggiunta di un account<br \/>\nOpzioni del comando geth account<br \/>\nCredenziali degli account<br \/>\nCriptovaluta in Ethereum<br \/>\nUnit\u00e0 monetarie di Ethereum<br \/>\nDeterminiamo il saldo corrente dei nostri account<br \/>\nTrasferimento di fondi da un account a un altro<br \/>\nMetodo eth.sendTransaction<br \/>\nVisualizzazione dello stato della transazione<br \/>\nRicevuta della transazione<br \/>\nSommario della lezione<\/p>\n<p><b class=\"spoiler_title\">Lezione 5. Pubblicazione del primo contratto<\/b>Smart contract in Ethereum<br \/>\nEsecuzione di uno smart contract<br \/>\nMacchina virtuale Ethereum<br \/>\nAmbiente di sviluppo integrato Remix Solidity IDE<br \/>\nAvvio della compilazione<br \/>\nChiamata delle funzioni del contratto<br \/>\nPubblicazione del contratto in una rete privata<br \/>\nOttenere la definizione ABI e il codice binario del contratto<br \/>\nPubblicazione del contratto<br \/>\nVerifica dello stato della transazione di pubblicazione del contratto<br \/>\nChiamata delle funzioni del contratto<br \/>\nCompilatore in batch solc<br \/>\nInstallazione di solc in Ubuntu<br \/>\nInstallazione di solc in Debian<br \/>\nCompilazione del contratto HelloSol<br \/>\nPubblicazione del contratto<br \/>\nInstallazione di solc su Raspbian<br \/>\nSommario della lezione<\/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 \/>\nInstallazione in Ubuntu<br \/>\nInstallazione in Debian<br \/>\nInstallazione e avvio di Ganache-cli<br \/>\nInstallazione di Web3<br \/>\nInstallazione di solc<br \/>\nInstallazione di Node.js su Raspbian<br \/>\nScript per ottenere l'elenco degli account nella console<br \/>\nScript per pubblicare uno smart contract<br \/>\nAvvio e ottenimento delle opzioni<br \/>\nOttenimento delle opzioni di avvio<br \/>\nCompilazione del contratto<br \/>\nSblocco dell'account<br \/>\nCaricamento di ABI e codice binario del contratto<br \/>\nStima del gas necessario<br \/>\nCreazione dell'oggetto e avvio della pubblicazione del contratto<br \/>\nAvvio dello script di pubblicazione del contratto<br \/>\nChiamata delle funzioni dello smart contract<br \/>\n\u00c8 possibile aggiornare uno smart contract pubblicato?<br \/>\nLavorare con Web3 versione 1.0.x<br \/>\nOttenere l'elenco degli account<br \/>\nPubblicazione del contratto<br \/>\nChiamata delle funzioni del contratto<br \/>\nTrasferimento di fondi da un account a un altro<br \/>\nTrasferimento di fondi all'account del contratto<br \/>\nAggiorniamo lo smart contract HelloSol<br \/>\nCreiamo uno script per visualizzare il saldo dell'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 \/>\nRicarichiamo il saldo dello smart contract<br \/>\nSommario della lezione<\/p>\n<p><b class=\"spoiler_title\">Lezione 7. Introduzione a Truffle<\/b>Installazione di Truffle<br \/>\nCreiamo il progetto HelloSol<br \/>\nCreazione della cartella e dei file di progetto<br \/>\nCatalogo contratti<br \/>\nCatalogo migrazioni<br \/>\nCatalogo test<br \/>\n\u0424\u0430\u0439\u043b truffle-config.js<br \/>\nCompilazione del contratto HelloSol<br \/>\nAvvio della pubblicazione del contratto<br \/>\nChiamata delle funzioni del contratto HelloSol nell'invito Truffle<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 \/>\nInstallazione del modulo truffle-contract<br \/>\nChiamata delle funzioni del contratto getValue e getString<br \/>\nChiamata delle funzioni del contratto setValue e setString<br \/>\nModifica del contratto e ripubblicazione<br \/>\nLavorare con Web3 versione 1.0.x<br \/>\nApportiamo modifiche al contratto intelligente HelloSol<br \/>\nScript per chiamare i metodi del contratto<br \/>\nTesting in Truffle<br \/>\nTest su Solidity<br \/>\nTest su JavaScript<br \/>\nSommario della lezione<\/p>\n<p><b class=\"spoiler_title\">Lezione 8. Tipi di dati Solidity<\/b>Contratto per lo studio dei tipi di dati<br \/>\nTipi di dati logici<br \/>\nNumeri interi senza segno e numeri interi con segno<br \/>\nNumeri con virgola fissa<br \/>\nIndirizzo<br \/>\nVariabili di tipi complessi<br \/>\nArray di dimensione fissa<br \/>\nArray dinamici<br \/>\nElenco<br \/>\nStrutture<br \/>\nDizionari mapping<br \/>\nSommario della lezione<\/p>\n<p><b class=\"spoiler_title\">Lezione 9. Migrazione dei contratti in una rete privata e nella rete Rinkeby<\/b>Pubblicazione del contratto da Truffle in una rete privata Geth<br \/>\nPreparazione del nodo della rete privata<br \/>\nPreparazione del contratto per il funzionamento<br \/>\nCompilazione e migrazione del contratto nella rete Truffle<br \/>\nAvvio della migrazione nella rete locale geth<br \/>\nEstrazione degli artefatti Truffle<br \/>\nPubblicazione del contratto da Truffle nella rete di test Rinkeby<br \/>\nPreparazione del nodo Geth per il funzionamento con Rinkeby<br \/>\nSincronizzazione del nodo<br \/>\nAggiunta di account<br \/>\nRicarica dell'account Rinkeby con ether<br \/>\nAvvio della migrazione del contratto nella rete Rinkeby<br \/>\nVisualizzazione delle informazioni sul contratto nella rete Rinkeby<br \/>\nConsole Truffle per la rete Rinkeby<br \/>\nUn modo pi\u00f9 semplice per chiamare le funzioni del contratto<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 \/>\nTrasferimento di fondi tra account nella console Truffle per Rinkeby<br \/>\nSommario della lezione<\/p>\n<p><b class=\"spoiler_title\">Lezione 10. Archivio dati decentralizzato Ethereum Swarm<\/b>Come funziona Ethereum Swarm<br \/>\nInstallazione e avvio di Swarm<br \/>\nOperazioni con file e directory<br \/>\nCaricamento del file in Ethereum Swarm<br \/>\nLettura del file da Ethereum Swarm<br \/>\nVisualizzazione del manifesto del file caricato<br \/>\nCaricamento di directory con sottodirectory<br \/>\nLettura del file dalla directory caricata<br \/>\nUtilizzo di un gateway pubblico 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 \/>\nModulo Perl Net::Ethereum::Swarm<br \/>\nInstallazione del modulo Net::Ethereum::Swarm<br \/>\nScrittura e lettura dei dati<br \/>\nSommario della lezione<\/p>\n<p><b class=\"spoiler_title\">Lezione 11. Framework Web3.py per lavorare con Ethereum in Python<\/b>Installazione di Web3.py<br \/>\nAggiornamento e installazione dei pacchetti necessari<br \/>\nInstallazione del modulo easysolc<br \/>\nPubblicazione del contratto con Web3.py<br \/>\nCompilazione del contratto<br \/>\nConnessione al provider<br \/>\nEsecuzione della pubblicazione del contratto<br \/>\nSalvataggio dell'indirizzo del contratto e di abi nel file<br \/>\nAvvio dello script di pubblicazione del contratto<br \/>\nChiamata dei metodi del contratto<br \/>\nLettura dell'indirizzo e di abi del contratto dal file JSON<br \/>\nConnessione al provider<br \/>\nCreazione dell'oggetto contratto<br \/>\nChiamata dei metodi del contratto<br \/>\nTruffle e Web3.py<br \/>\nSommario della lezione<\/p>\n<p><b class=\"spoiler_title\">Lezione 12. Oracoli<\/b>Un contratto intelligente pu\u00f2 fidarsi dei dati del mondo esterno<br \/>\nGli oracoli come intermediari informativi della blockchain<br \/>\nFonte dei dati<br \/>\nCodice per la rappresentazione dei dati dalla fonte<br \/>\nOracolo per registrare il tasso di cambio nella blockchain<br \/>\nContratto USDRateOracle<br \/>\nAggiornamento del tasso di cambio nel contratto intelligente<br \/>\nUtilizzo del provider Web Socket<br \/>\nAttesa dell'evento RateUpdate<br \/>\nElaborazione dell'evento RateUpdate<br \/>\nInizio dell'aggiornamento dei dati nel contratto intelligente<br \/>\nSommario della lezione<\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/467347\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434 \u043a\u043d\u0438\u0433\u043e\u0439 \u00ab\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 Solidity \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u00bb, \u0438 \u0432\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430, \u0430 \u043a\u043d\u0438\u0433\u0430 \u0438\u0437\u0434\u0430\u043d\u0430 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u041b\u0438\u0442\u0440\u0435\u0441\u0435. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u043c\u043e\u044f \u043a\u043d\u0438\u0433\u0430 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0441\u043c\u0430\u0440\u0442-\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u0432 Solidity \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 DApp \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0447\u0435\u0439\u043d\u0430 Ethereum. \u041e\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 12 \u0443\u0440\u043e\u043a\u043e\u0432 \u0441 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f\u043c\u0438. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0438\u0445, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29275,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-39018","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Libro \u00abCreazione di smart contract Solidity per la blockchain Ethereum. Guida pratica\u00bb | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/it\/blog\/news\/kniga-sozdanie-smart-kontraktov-solidity-dlya-blokchejna-ethereum-prakticheskoe-rukovodstvo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/39018","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=39018"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/39018\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/29275"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=39018"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=39018"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=39018"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}