<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ blokchain - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Impara a programmare gratuitamente! Tutorial di programmazione su Python, JavaScript, Linux e molto altro. ]]>
        </description>
        <link>https://www.freecodecamp.org/italian/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ blokchain - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/italian/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 08:28:08 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/italian/news/tag/blokchain/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Come creare un NFT e renderlo su OpenSea Marketplace ]]>
                </title>
                <description>
                    <![CDATA[ In questo articolo, ti mostrerò come realizzare un NFT senza competenze di ingegneria del software. Quindi impareremo come creare NFT personalizzabili illimitati con Brownie [https://eth-brownie.readthedocs.io/en/stable/] , Python [https://www.python.org/] e Chainlink [https://docs.chain.link/docs] . E vedremo come rendere e vendere la nostra creazione sul mercato NFT di OpenSea . [https://opensea.io/] Se stai ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-creare-un-nft-e-renderlo-su-opensea-marketplace/</link>
                <guid isPermaLink="false">622dd856ccdd7f051c455302</guid>
                
                    <category>
                        <![CDATA[ blokchain ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Thu, 31 Mar 2022 08:35:11 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/Advanced-NFT-Deployment---1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-to-make-an-nft-and-render-on-opensea-marketplace/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Make an NFT and Render it on the OpenSea Marketplace</a>
      </p><p>In questo articolo, ti mostrerò come realizzare un NFT senza competenze di ingegneria del software. Quindi impareremo come creare NFT personalizzabili illimitati con <a href="https://eth-brownie.readthedocs.io/en/stable/">Brownie</a> , <a href="https://www.python.org/">Python</a> e <a href="https://docs.chain.link/docs">Chainlink</a> . E vedremo come rendere e vendere la nostra creazione sul mercato NFT di <a href="https://opensea.io/">OpenSea .</a></p><p>Se stai cercando un tutorial che utilizzi Truffle, JavaScript e divertenti personaggi medievali, dai un'occhiata a come <a href="https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/">costruire, distribuire e vendere il tuo NFT qui</a> .</p><h2 id="cos-un-nft"><strong>Cos'è un NFT?</strong></h2><p><a href="https://eips.ethereum.org/EIPS/eip-721" rel="noopener">Gli NFT</a> (Non-Fungible Tokens) possono essere riassunti in una parola: "unico". Si tratta di contratti intelligenti distribuiti su una blockchain che rappresentano qualcosa di unico.</p><h3 id="erc20-vs-erc721"><strong>ERC20 vs ERC721</strong></h3><p>Gli NFT sono uno standard di token blockchain simile a <a href="https://www.investopedia.com/news/what-erc20-and-what-does-it-mean-ethereum/" rel="noopener">ERC20</a> , come AAVE, SNX e LINK (tecnicamente un ERC677). Gli ERC20 sono token "fungibili", che significa "sostituibili" o "intercambiabili".</p><p>Ad esempio, la tua banconota da un dollaro varrà 1 $ indipendentemente dalla banconota da un dollaro che usi. Il numero di serie sulla banconota da un dollaro potrebbe essere diverso, ma le banconote sono intercambiabili e varranno sempre 1 $, qualunque cosa accada.</p><p>Gli NFT, d'altra parte, sono "non fungibili" e seguono il proprio standard di token, l'<a href="https://eips.ethereum.org/EIPS/eip-721">ERC721. </a>Ad esempio, la Gioconda è "non fungibile". Anche se qualcuno può farne una copia, ci sarà sempre solo una Monna Lisa. Se la Gioconda fosse creata su una blockchain, sarebbe una NFT.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/03/image-145.png" class="kg-image" alt="Crea un NFT" width="600" height="400" loading="lazy"><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Immagine originale da </font></font><a href="https://en.wikipedia.org/wiki/Mona_Lisa" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Wikipedia</font></font></a></figcaption></figure><h2 id="a-cosa-servono-gli-nft"><strong>A cosa servono gli NFT?</strong></h2><p>Gli NFT forniscono valore a creatori, artisti, progettisti di giochi e altro avendo una cronologia permanente di distribuzione archiviata sulla chain.</p><p>Saprai sempre chi ha creato la NFT, chi possedeva la NFT, da dove proveniva e altro ancora, dando loro molto valore rispetto all'arte tradizionale. Nell'arte tradizionale, può essere difficile capire cosa sia un "falso", mentre sulla chain la storia è facilmente tracciabile.</p><p>E poiché i contratti intelligenti e gli NFT sono programmabili al 100%, gli NFT possono anche avere royalties integrate e qualsiasi altra funzionalità aggiunta. Ricompensare gli artisti è sempre stato un problema, poiché spesso il lavoro di un artista viene distribuito senza alcuna attribuzione.</p><p>Sempre più artisti e ingegneri stanno saltando su questo enorme valore aggiunto, perché è finalmente un ottimo modo per gli artisti di essere ricompensati per il loro lavoro. Oltre a questo, gli NFT sono un modo divertente per mostrare la tua creatività e diventare un collezionista in un mondo digitale.</p><h3 id="il-valore-degli-nft"><strong>Il valore degli NFT</strong></h3><p>Gli NFT hanno fatto molta strada e continuiamo a vedere vendite di NFT da record, come "Everydays: The First 5.000 Days" venduto per $ 69,3 milioni.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-31-at-9.48.19-AM.png" class="kg-image" alt="Crea un NFT" width="600" height="400" loading="lazy"><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Immagine da </font></font><a href="https://twitter.com/ChristiesInc/status/1361670588608176128" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;"><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Twitter</font></font></a></figcaption></figure><p>Quindi c'è molto valore qui, ed è anche un modo divertente, dinamico e coinvolgente di creare arte nel mondo digitale oltre che di a imparare la creazione di contratti intelligenti. Quindi ora ti insegnerò tutto ciò che devi sapere sulla creazione di NFT.</p><h2 id="come-fare-un-nft"><strong>Come fare un NFT</strong></h2><h3 id="cosa-non-tratteremo"><strong>Cosa non tratteremo</strong></h3><p>Ora, il modo più semplice per creare un NFT è semplicemente andare su una piattaforma come <a href="https://opensea.io/">Opensea</a> , <a href="https://rarible.com/">Rarible</a> o <a href="https://mintable.app/">Mintible</a> e seguire la loro guida passo passo per l'implementazione sulla loro piattaforma.</p><p>Puoi prendere questa strada al 100%, tuttavia potresti rimanere legato alla piattaforma e bloccato nelle sue funzionalità. Non puoi ottenere la personalizzazione illimitata o utilizzare davvero nessuno dei vantaggi offerti dagli NFT. Ma se sei un ingegnere del software alle prime armi, o non molto tecnico, questa è la strada che fa per te.</p><p>Invece se stai cercando di diventare un ingegnere del software più forte, imparare un po' di solidity e ottenere le capacità di creare qualcosa con creatività illimitata, continua a leggere!</p><p>Se sei nuovo nell'usare solidity, non ti preoccupare, parleremo delle basi anche in questo caso.</p><h2 id="come-creare-un-nft-con-personalizzazione-illimitata"><strong>Come creare un NFT con personalizzazione illimitata</strong></h2><p>Ti farò fare un salto di qualità con questo <a href="https://github.com/PatrickAlphaC/nft-mix">Brownie Mix NFT</a> . Questo è un repository funzionante con molto codice boilerplate.</p><h3 id="prerequisiti"><strong>Prerequisiti</strong></h3><p>Per iniziare abbiamo bisogno di alcune cose installate:</p><ul><li><a href="https://www.python.org/downloads/">Python</a></li><li><a href="https://nodejs.org/en/download/">Nodejs</a> e npm</li><li><a href="https://metamask.io/">Metamask</a></li></ul><p>Se non hai familiarità con Metamask, puoi <a href="https://docs.chain.link/docs/install-metamask">seguire questo tutorial</a> per configurarlo.</p><h3 id="rinkeby-testnet-eth-e-link"><strong>Rinkeby Testnet ETH e LINK</strong></h3><p>Lavoreremo anche sul testnet Rinkeby di Ethereum, quindi implementeremo i nostri contratti su una vera blockchain, gratuitamente!</p><p>I testnet sono ottimi modi per testare come si comportano i nostri contratti intelligenti nel mondo reale. Abbiamo bisogno di Rinkeby ETH e Rinkeby LINK, che possiamo ottenere gratuitamente dai link agli ultimi faucet dalla <a href="https://docs.chain.link/docs/link-token-contracts#rinkeby">documentazione di Chainlink</a> .</p><p>Dovremo anche aggiungere il token LINK rinkeby al nostro metamask, cosa che possiamo fare seguendo la <a href="https://docs.chain.link/docs/acquire-link">documentazione di acquisizione LINK</a> .</p><p>Se sei ancora confuso, <a href="https://www.youtube.com/watch?v=4ZgFijd02Jo">puoi seguire questo video</a> , assicurati di usare Rinkeby invece di Ropsten.</p><p>Quando lavoriamo con una piattaforma di smart contract come Ethereum, dobbiamo pagare un po' di ETH e quando riceviamo dati da off-chain, dobbiamo pagare un po' di LINK. Questo è il motivo per cui abbiamo bisogno di testnet LINK ed ETH.</p><p>Fantastico, iniziamo. Questa è <a href="https://testnets.opensea.io/assets/0x8acb7ca932892eb83e4411b59309d44dddbc4cdf/0">l'NFT che implementeremo su OpenSea.</a></p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-31-at-10.58.35-AM.png" class="kg-image" alt="Screen-Shot-31-03-2021-at-10.58.35-AM" width="600" height="400" loading="lazy"></figure><h3 id="avvio-rapido"><strong>Avvio rapido</strong></h3><pre><code class="language-bash">git clone https://github.com/PatrickAlphaC/nft-mix
cd nft-mix</code></pre><p>Stupendo! Ora dobbiamo installare <code>ganache-cli</code> e <code>eth-brownie</code>.</p><pre><code>pip install eth-brownie
npm install -g ganache-cli</code></pre><p>Ora possiamo <a href="https://www.twilio.com/blog/2017/01/how-to-set-environment-variables.html">impostare le nostre variabili d'ambiente</a> . Se non hai familiarità con le variabili di ambiente, puoi semplicemente aggiungerle al tuo file <code>.env</code> e quindi eseguire:</p><p><code>source .env</code></p><p>Un esempio di file <code>.env</code> dovrebbe essere nel repository che hai appena clonato con le variabili di ambiente commentate. Decommentale per usarle!</p><p>Avrai bisogno di un <code>WEB3_INFURA_PROJECT_ID</code> e un <code>PRIVATE_KEY</code>. <code>WEB3_INFURA_PROJECT_ID</code> puoi trovarlo registrando gratuitamente un <a href="https://infura.io/">account Infura</a>. Questo ci darà un modo per inviare transazioni alla blockchain.</p><p>Avremo anche bisogno di una chiave privata, che puoi ottenere dal tuo Metamask. Premi i 3 puntini e fai clic su <code>Account Details</code> ed <code>Export Private Key</code>. Per favore NON condividere questa chiave con nessuno se ci metti soldi veri!</p><figure class="kg-card kg-code-card"><pre><code>export PRIVATE_KEY=YOUR_KEY_HERE
export WEB3_INFURA_PROJECT_ID=YOUR_PROJECT_ID_HERE</code></pre><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">.env</font></font></figcaption></figure><p>Ora possiamo distribuire il nostro contratto NFT e creare il nostro primo oggetto da collezione con i seguenti due comandi.</p><pre><code>brownie run scripts/simple_collectible/deploy_simple.py --network rinkeby
brownie run scripts/simple_collectible/create_collectible.py --network rinkeby</code></pre><p>Il primo script distribuisce il nostro contratto NFT sulla blockchain di Rinkeby e il secondo crea il nostro primo oggetto da collezione.</p><p>Hai appena implementato il tuo primo contratto intelligente!</p><p>Non fa molto, ma non preoccuparti: ti mostrerò come renderizzarlo su OpenSea nella parte avanzata di questo tutorial. Ma prima, diamo un'occhiata allo standard del token ERC721.</p><h2 id="lo-standard-del-token-erc721"><strong>Lo standard del token ERC721</strong></h2><p>Diamo un'occhiata al contratto che abbiamo appena distribuito, nel file <code>SimpleCollectible.sol</code>.</p><pre><code class="language-javascript">// SPDX-License-Identifier: MIT
pragma solidity 0.6.6;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract SimpleCollectible is ERC721 {
    uint256 public tokenCounter;
    constructor () public ERC721 ("Dogie", "DOG"){
        tokenCounter = 0;
    }

    function createCollectible(string memory tokenURI) public returns (uint256) {
        uint256 newItemId = tokenCounter;
        _safeMint(msg.sender, newItemId);
        _setTokenURI(newItemId, tokenURI);
        tokenCounter = tokenCounter + 1;
        return newItemId;
    }

}
</code></pre><p>Stiamo usando il pacchetto <a href="https://github.com/OpenZeppelin/openzeppelin-contracts">OpenZepplin</a> per il token ERC721. Questo pacchetto che abbiamo importato ci consente di utilizzare tutte le funzioni di un tipico token ERC721. Questo definisce tutte le funzionalità che avranno i nostri token, come <code>transfer</code> che sposta i token a nuovi utenti, <code>safeMint</code> che crea nuovi token e altro ancora.</p><p>Puoi trovare tutte le funzioni che vengono fornite al nostro contratto controllando il <a href="https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol">contratto token OpenZepplin ERC721</a> . Il nostro contratto eredita queste funzioni su questa riga:</p><pre><code>contract SimpleCollectible is ERC721 {</code></pre><p>È così che solidity fa eredità. Quando distribuiamo un contratto, il &nbsp;<code>constructor</code> viene chiamato automaticamente e richiede alcuni parametri.</p><pre><code>constructor () public ERC721 ("Dogie", "DOG"){
        tokenCounter = 0;
    }</code></pre><p>Usiamo anche il costruttore di <code>ERC721</code>, nel nostro costruttore, e dobbiamo solo dargli un nome e un simbolo. Nel nostro caso, sono "Dogie" e "DOG". Ciò significa che ogni NFT che creiamo sarà di tipo Dogie/DOG.</p><p>Questo è come il caso delle carte di Pokemon in cui ognuna di essa è ancora un pokemon, o ogni giocatore di baseball su una carta collezionabile è ancora un giocatore di baseball. Ogni giocatore di baseball è unico, ma rimangono comunque tutti giocatori di baseball. Stiamo solo usando il tipo <code>DOG</code>.</p><p>Abbiamo <code>tokenCounter</code> in alto che conta quanti NFT abbiamo creato di questo tipo. Ogni nuovo token ottiene un <code>tokenId</code> basato sul <code>tokenCounter</code> corrente .</p><p>Possiamo effettivamente creare un NFT con la funzione <code>createCollectible</code>. Questo è ciò che chiamiamo nel nostro script <code>create_collectible.py</code>.</p><pre><code>function createCollectible(string memory tokenURI) public returns (uint256) {
        uint256 newItemId = tokenCounter;
        _safeMint(msg.sender, newItemId);
        _setTokenURI(newItemId, tokenURI);
        tokenCounter = tokenCounter + 1;
        return newItemId;
    }</code></pre><p>La funzione <code>_safeMint</code> crea il nuovo NFT e lo assegna a chi ha chiamato <code>createdCollectible</code>, alias the <code>msg.sender</code>, con un <code>newItemId</code> derivato da <code>tokenCounter</code>. In questo modo possiamo tenere traccia di chi possiede cosa, controllando il proprietario del <code>tokenId</code>.</p><p>Noterai che chiamiamo anche <code>_setTokenURI</code>. Parliamo di questo.</p><h2 id="cosa-sono-i-metadati-nft-e-tokenuri"><strong>Cosa sono i metadati NFT e TokenURI?</strong></h2><p>Quando vennero creati i contratti intelligenti e quindi creati gli NFT, le persone si sono subito rese conto che è <em><em>davvero</em></em> costoso distribuire molti dati sulla blockchain. Immagini di appena un KB possono facilmente <a href="https://ethereum.stackexchange.com/a/896/57451">costare oltre 1 milione di dollari per l'archiviazione</a> .</p><p>Questo è chiaramente un problema per gli NFT, poiché avere un'arte creativa significa che devi archiviare queste informazioni da qualche parte. Volevano anche un modo leggero per archiviare gli attributi su un NFT, ed è qui che entrano in gioco tokenURI e metadati.</p><h3 id="tokenuri"><strong>TokenURI</strong></h3><p>Il <code>tokenURI</code> su un NFT è un identificatore univoco di come "sembra" il token. Un URI potrebbe essere una chiamata API su HTTPS, un hash IPFS o <a href="https://danielmiessler.com/study/difference-between-uri-url/">qualsiasi altra cosa</a> univoca.</p><p>Seguono uno standard di visualizzazione dei metadati simile a questo:</p><pre><code class="language-json">{
    "name": "name",
    "description": "description",
    "image": "https://ipfs.io/ipfs/QmTgqnhFBMkfT9s8PHKcdXBn1f5bG3Q5hmBaR4U6hoTvb1?filename=Chainlink_Elf.png",
    "attributes": [
        {
            "trait_type": "trait",
            "value": 100
        }
    ]
}</code></pre><p>Questi mostrano l'aspetto di un NFT e i suoi attributi. La sezione <code>image</code> punta a un altro URI di come appare l'NFT. Ciò rende facile per le piattaforme NFT come Opensea, Rarible e Mintable eseguire il rendering di NFT sulle loro piattaforme, poiché sono tutti alla ricerca di questi metadati.</p><h3 id="metadati-off-chain-vs-metadati-on-chain"><strong>Metadati off-chain vs metadati on-chain</strong></h3><p>Ora potresti pensare "aspetta... se i metadati non sono on-chain, significa che il mio NFT potrebbe andare via a un certo punto"? E avresti ragione.</p><p>Avresti anche ragione nel pensare che avere i metadati off-chain significa che non puoi utilizzare quei metadati per far interagire i tuoi contratti intelligenti tra loro.</p><p>Questo è il motivo per cui vogliamo concentrarci sui metadati on-chain, in modo da poter programmare i nostri NFT per interagire tra loro.</p><p>Tuttavia, abbiamo ancora bisogno della parte <code>image</code> dei metadati off-chain, poiché non abbiamo un ottimo modo per archiviare immagini di grandi dimensioni on-chain. Ma non preoccuparti, possiamo farlo gratuitamente su una rete decentralizzata usando ancora <a href="https://ipfs.io/">IPFS</a> .</p><p>Ecco un esempio di imageURI di IPFS che mostra l' <a href="https://opensea.io/assets/0x8d78277bc2c63f07efc2c0c8a8512de4ad459a05/1">Elfo Chainlink</a> creato nel <a href="https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/">tutorial di Dungeons and Dragons</a>.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/italian/news/content/images/2022/03/image-3.png" class="kg-image" alt="image-3" srcset="https://www.freecodecamp.org/italian/news/content/images/size/w600/2022/03/image-3.png 600w, https://www.freecodecamp.org/italian/news/content/images/size/w1000/2022/03/image-3.png 1000w, https://www.freecodecamp.org/italian/news/content/images/2022/03/image-3.png 1030w" sizes="(min-width: 720px) 720px" width="1030" height="1356" loading="lazy"><figcaption>L'elfo Chainlink</figcaption></figure><p>Non abbiamo impostato un tokenURI per il semplice NFT perché volevamo mostrare solo un esempio di base.</p><p>Passiamo ora all'NFT avanzato, così possiamo vedere alcune delle straordinarie funzionalità che possiamo ottenere con i metadati on-chain, avere il rendering NFT su opensea e creare Dogie!</p><p>Se vuoi un video di ripasso sulla sezione che abbiamo appena esaminato, segui la <a href="https://www.youtube.com/watch?v=ZH_7nEIJDUY">distribuzione di un semplice video NFT.</a></p><h2 id="nft-dinamici-e-avanzati"><strong>NFT dinamici e avanzati</strong></h2><p><a href="https://blog.chain.link/build-deploy-and-sell-your-own-dynamic-nft/">Gli NFT dinamici</a> sono NFT che possono cambiare nel tempo o avere funzionalità a catena che possiamo utilizzare per farli interagire tra loro. Questi sono gli NFT che nel nostro caso, hanno la personalizzazione illimitata per creare interi giochi, mondi o opere d'arte interattive di qualche tipo. Passiamo alla sezione avanzata.</p><h3 id="avvio-rapido-avanzato"><strong>Avvio rapido avanzato</strong></h3><p>Assicurati di avere abbastanza testnet ETH e LINK nel tuo metamask, quindi esegui quanto segue:</p><pre><code>brownie run scripts/advanced_collectible/deploy_advanced.py --network rinkeby
brownie run scripts/advanced_collectible/create_collectible.py --network rinkeby</code></pre><p>Il nostro oggetto da collezione qui è una razza di cane casuale restituita dal <a href="https://docs.chain.link/docs/chainlink-vrf">Chainlink VRF</a>. Chainlink VRF è un modo per ottenere numeri casuali dimostrabili e quindi una vera rarità nei nostri NFT. Quindi vogliamo creare i suoi metadati.</p><pre><code>brownie run scripts/advanced_collectible/create_metadata.py --network rinkeby</code></pre><p>Possiamo quindi caricare facoltativamente questi dati su IPFS in modo da poter avere un tokenURI. Ti mostrerò come farlo più tardi. Per ora, useremo solo il tokenURI di esempio di:</p><pre><code>https://ipfs.io/ipfs/Qmd9MCGtdVz2miNumBHDbvj8bigSgTwnr4SbyH6DNnpWdt?filename=1-PUG.json</code></pre><p>Se scarichi <a href="https://chrome.google.com/webstore/detail/ipfs-companion/nibjojkomfdiaoajekhjakgkdhaomnch?hl=en">IPFS Companion</a> nel tuo browser, puoi utilizzare quell'URL per vedere cosa restituisce l'URI. Assomiglierà &nbsp;a qualcosa del genere:</p><pre><code class="language-json">{
    "name": "PUG",
    "description": "An adorable PUG pup!",
    "image": "https://ipfs.io/ipfs/QmSsYRx3LpDAb1GZQm7zZ1AuHZjfbPkD6J7s9r41xu1mf8?filename=pug.png",
    "attributes": [
        {
            "trait_type": "cuteness",
            "value": 100
        }
    ]
}</code></pre><p>Quindi possiamo eseguire il nostro script &nbsp;<code>set_tokenuri.py</code>:</p><pre><code>brownie run scripts/advanced_collectible/set_tokenuri.py --network rinkeby</code></pre><p>E otterremo un output come questo:</p><pre><code>Running 'scripts/advanced_collectible/set_tokenuri.py::main'...
Working on rinkeby
Transaction sent: 0x8a83a446c306d6255952880c0ca35fa420248a84ba7484c3798d8bbad421f88e
  Gas price: 1.0 gwei   Gas limit: 44601   Nonce: 354
  AdvancedCollectible.setTokenURI confirmed - Block: 8331653   Gas used: 40547 (90.91%)

Awesome! You can view your NFT at https://testnets.opensea.io/assets/0x679c5f9adC630663a6e63Fa27153B215fe021b34/0
Please give up to 20 minutes, and hit the "refresh metadata" button</code></pre><p>E possiamo premere il link fornito per vedere come appare su Opensea! Potrebbe essere necessario premere il pulsante <code>refresh metadata</code> e attendere qualche minuto.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-31-at-12.33.42-PM.png" class="kg-image" alt="Crea un NFT" width="600" height="400" loading="lazy"><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Aggiorna metadati</font></font></figcaption></figure><h2 id="la-razza-casuale"><strong>La razza casuale</strong></h2><p>Parliamo di quello che abbiamo appena fatto. Ecco il nostro <code>AdvancedCollectible.sol</code>:</p><pre><code>pragma solidity 0.6.6;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@chainlink/contracts/src/v0.6/VRFConsumerBase.sol";

contract AdvancedCollectible is ERC721, VRFConsumerBase {
    uint256 public tokenCounter;
    enum Breed{PUG, SHIBA_INU, BRENARD}
    // add other things
    mapping(bytes32 =&gt; address) public requestIdToSender;
    mapping(bytes32 =&gt; string) public requestIdToTokenURI;
    mapping(uint256 =&gt; Breed) public tokenIdToBreed;
    mapping(bytes32 =&gt; uint256) public requestIdToTokenId;
    event requestedCollectible(bytes32 indexed requestId); 


    bytes32 internal keyHash;
    uint256 internal fee;
    uint256 public randomResult;
    constructor(address _VRFCoordinator, address _LinkToken, bytes32 _keyhash)
    public 
    VRFConsumerBase(_VRFCoordinator, _LinkToken)
    ERC721("Dogie", "DOG")
    {
        tokenCounter = 0;
        keyHash = _keyhash;
        fee = 0.1 * 10 ** 18;
    }

    function createCollectible(string memory tokenURI, uint256 userProvidedSeed) 
        public returns (bytes32){
            bytes32 requestId = requestRandomness(keyHash, fee, userProvidedSeed);
            requestIdToSender[requestId] = msg.sender;
            requestIdToTokenURI[requestId] = tokenURI;
            emit requestedCollectible(requestId);
    }

    function fulfillRandomness(bytes32 requestId, uint256 randomNumber) internal override {
        address dogOwner = requestIdToSender[requestId];
        string memory tokenURI = requestIdToTokenURI[requestId];
        uint256 newItemId = tokenCounter;
        _safeMint(dogOwner, newItemId);
        _setTokenURI(newItemId, tokenURI);
        Breed breed = Breed(randomNumber % 3); 
        tokenIdToBreed[newItemId] = breed;
        requestIdToTokenId[requestId] = newItemId;
        tokenCounter = tokenCounter + 1;
    }

    function setTokenURI(uint256 tokenId, string memory _tokenURI) public {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );
        _setTokenURI(tokenId, _tokenURI);
    }
}
</code></pre><p>Usiamo il Chainlink VRF per creare una razza casuale da un elenco di <code>PUG, SHIBA_INU, BRENARD</code>. Questa volta chiamando <code>createCollectible</code>, abbiamo effettivamente avviato una richiesta al nodo Chainlink VRF off-chain e siamo tornati con un numero casuale per creare l'NFT con una di quelle 3 razze.</p><p>L'uso della vera casualità nei tuoi NFT è un ottimo modo per creare una vera rarità e l'uso di un numero casuale di un oracolo Chainlink significa che il tuo numero è probabilmente casuale e non può essere influenzato dai minatori.</p><p>Puoi saperne di più su <a href="https://docs.chain.link/docs/chainlink-vrf">Chainlink VRF nella documentazione</a> .</p><p>Il nodo Chainlink risponde chiamando la funzione <code>fulfillRandomness</code> e crea l'oggetto da collezione in base al numero casuale. Quindi dobbiamo ancora chiamare <code>_setTokenURI</code> per dare al nostro NFT l'aspetto di cui ha bisogno.</p><p>Qui non abbiamo fornito i nostri attributi NFT, ma gli attributi sono un ottimo modo per far combattere e interagire i nostri NFT. Puoi vedere un ottimo esempio di NFT con attributi in questo <a href="https://github.com/PatrickAlphaC/dungeons-and-dragons-nft">esempio di Dungeons and Dragons</a> .</p><h3 id="metadati-da-ipfs"><strong>Metadati da IPFS</strong></h3><p>Stiamo usando IPFS per memorizzare due file:</p><ol><li>L'immagine dell'NFT (l'immagine del carlino)</li><li>Il file tokenURI (il file JSON che include anche il collegamento dell'immagine)</li></ol><p>Usiamo IPFS perché è una piattaforma decentralizzata gratuita. Possiamo aggiungere i nostri tokenURI e immagini a IPFS scaricando <a href="https://docs.ipfs.io/install/ipfs-desktop/">IPFS desktop</a> e premendo il pulsante <code>import</code>.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/03/Screen-Shot-2021-03-31-at-12.43.13-PM.png" class="kg-image" alt="Crea un NFT" width="600" height="400" loading="lazy"><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">IPFS aggiunge un file</font></font></figcaption></figure><p>Quindi, possiamo condividere l'URI premendo i 3 punti accanto al file che vogliamo condividere, premendo <code>share link</code> e copiando il collegamento fornito. Possiamo quindi aggiungere questo collegamento nel nostro file &nbsp;<code>set_tokenuri.py</code> per modificare l'URI del token che vogliamo utilizzare.</p><h3 id="persistenza"><strong>Persistenza</strong></h3><p>Tuttavia, se il tokenURI è solo sul nostro nodo, significa che quando il nostro nodo è inattivo, nessun altro può visualizzarlo. Quindi vogliamo che altri <code>pin</code> siano nel nostro NFT. Possiamo utilizzare un servizio di pinning come <a href="https://pinata.cloud/">Pinata</a> per mantenere in vita i nostri dati anche quando il nostro nodo IPFS è inattivo.</p><p>Immagino che in futuro sempre più metadati verranno archiviati su IPFS e altre piattaforme di archiviazione decentralizzate. I server centralizzati possono non funzionare e significherebbe che l'arte di quegli NFT è persa per sempre. Assicurati di controllare dove si trova il tokenURI dell'NFT che usi!</p><p>Mi aspetto anche che più persone utilizzeranno piattaforme dStorage come <a href="https://docs.filecoin.io/">Filecoin</a>, poiché anche l'utilizzo di un servizio di pinning non è decentralizzato come dovrebbe essere.</p><h2 id="andando-avanti"><strong>Andando avanti</strong></h2><p>Se desideri una video guida sull'NFT avanzato, puoi guardare il <a href="https://www.youtube.com/watch?v=tCR7b9p9GiM">video NFT avanzato</a> .</p><p>Ora hai le capacità per creare NFT divertenti, personalizzabili e interattivi e renderli su un mercato.</p><p>Gli NFT sono modi divertenti e potenti per avere artisti accuratamente compensati per tutto il duro lavoro che fanno. Buona fortuna e ricordati di divertirti!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come funziona davvero la blockchain? Ho creato un'app per mostrartelo. ]]>
                </title>
                <description>
                    <![CDATA[ di Sean Han Secondo Wikipedia, una blockchain è: > Un database distribuito utilizzato per mantenere un elenco di record in continua crescita, chiamati blocchi . Sembra carino, ma come funziona? Per illustrare una blockchain, utilizzeremo un'interfaccia a riga di comando open source chiamata Blockchain CLI [https://github.com/seanseany/blockchain-cli] . Ho anche creato ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-funziona-davvero-la-blockchain-ho-creato-unapp-per-mostrartelo/</link>
                <guid isPermaLink="false">62224484db2217050c2ed475</guid>
                
                    <category>
                        <![CDATA[ blokchain ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Mon, 07 Mar 2022 08:34:07 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/1_Y3c_hIqCuiDH4x-8dObVyg.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/how-does-blockchain-really-work-i-built-an-app-to-show-you-6b70cd4caf7d/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How does blockchain really work? I built an app to show you.</a>
      </p><p>di Sean Han</p><p>Secondo Wikipedia, una blockchain è:</p><blockquote>Un database distribuito utilizzato per mantenere un elenco di record in continua crescita, chiamati <em><em>blocchi</em></em> .</blockquote><p>Sembra carino, ma come funziona?</p><p>Per illustrare una blockchain, utilizzeremo un'interfaccia a riga di comando open source chiamata <a href="https://github.com/seanseany/blockchain-cli" rel="noopener">Blockchain CLI</a> .</p><p>Ho anche creato una <a href="http://blockchaindemo.io/" rel="noopener">versione basata su browser di questo qui</a> .</p><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/zSZrnGuYhLmiKeazyIjY-TyzCTcZBjBZoQ1x" class="kg-image" alt="zSZrnGuYhLmiKeazyIjY-TyzCTcZBjBZoQ1x" width="800" height="583" loading="lazy"></figure><h3 id="installazione-della-versione-dell-interfaccia-della-riga-di-comando"><strong><strong>Installazione della versione dell'interfaccia della riga di comando</strong></strong></h3><p>Se non lo hai già fatto, installa <a href="https://nodejs.org/download/" rel="noopener">Node.js</a> .</p><p>Quindi esegui quanto segue nel tuo terminale:</p><pre><code class="language-bash"># Clona questo repository
$ git clone https://github.com/seanseany/blockchain-cli

# Vai nel repository
$ cd blockchain-cli

# Installa le dipendenze
$ npm install

# Avvia l'app
$ npm start</code></pre><p>Dovresti vedere <code>? Welcome to Blockchain CLI!</code> e il prompt &nbsp;<code>blockchain → </code> pronto a ricevere comandi.</p><h3 id="che-aspetto-ha-un-blocco"><strong><strong>Che aspetto ha un blocco?</strong></strong></h3><p>Per vedere la tua blockchain attuale, inserisci <code>blockchain</code> o <code>bc</code> nel prompt dei comandi. Dovresti vedere un blocco come l'immagine qui sotto.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://cdn-media-1.freecodecamp.org/images/EJwQgibxDMqIpDvroRN-k5R4CWR5ZZj6-vIw" class="kg-image" alt="EJwQgibxDMqIpDvroRN-k5R4CWR5ZZj6-vIw" width="616" height="420" loading="lazy"><figcaption><font style="box-sizing: inherit; vertical-align: inherit;"><font style="box-sizing: inherit; vertical-align: inherit;">Un blocco sulla blockchain</font></font></figcaption></figure><ul><li><strong><strong>Indice (blocco n.):</strong></strong> quale blocco è? (Il blocco Genesis ha indice 0)</li><li><strong><strong>Hash:</strong></strong> il blocco è valido?</li><li><strong><strong>Hash precedente:</strong></strong> il blocco precedente è valido?</li><li><strong><strong>Timestamp:</strong></strong> quando è stato aggiunto il blocco?</li><li><strong><strong>Dati:</strong></strong> quali informazioni sono memorizzate nel blocco?</li><li><strong><strong>Nonce:</strong></strong> quante iterazioni abbiamo passato prima di trovare un blocco valido?</li></ul><h4 id="blocco-genesis"><strong><strong>Blocco </strong>Genesis</strong></h4><p>Ogni blockchain inizierà con <code>? Genesis Block.</code> Come vedrai più avanti, ogni blocco sulla blockchain dipende dal blocco precedente. Quindi, il blocco Genesis è necessario per estrarre il nostro primo blocco.</p><h3 id="cosa-succede-quando-viene-estratto-un-nuovo-blocco"><strong><strong>Cosa succede quando viene estratto un nuovo blocco?</strong></strong></h3><figure class="kg-card kg-image-card"><img src="https://cdn-media-1.freecodecamp.org/images/p0XcmG5w3eBvkxEejjPVd99nNBCzUqrhdxbQ" class="kg-image" alt="p0XcmG5w3eBvkxEejjPVd99nNBCzUqrhdxbQ" width="262" height="28" loading="lazy"></figure><p>Estraiamo il nostro primo blocco. &nbsp;Digita <code>mine freeCodeCamp♥︎</code> nel prompt.</p><p>La blockchain esamina l'ultimo blocco sulla blockchain per l'indice e l'hash precedente. In questo caso il blocco Genesis è l'ultimo blocco.</p><ul><li><strong><strong>Indice:</strong></strong> o+1 = 1</li><li><strong><strong>Hash precedente:</strong></strong> 0000018035a828da0…</li><li><strong><strong>Timestamp:</strong></strong> quando viene aggiunto il blocco</li><li><strong><strong>Dati:</strong></strong> freeCodeCamp❤</li><li><strong><strong>Hash:</strong></strong> ??</li><li><strong><strong>Nonce:</strong></strong> ??</li></ul><h3 id="come-viene-calcolato-l-hash"><strong><strong>Come viene calcolato l'hash?</strong></strong></h3><p>Un <strong><strong>valore hash è un valore</strong></strong> numerico di lunghezza fissa che identifica i dati in modo univoco.</p><p>L'hash viene calcolato prendendo l'indice, l'hash del blocco precedente, il timestamp, i dati del blocco e nonce come input.</p><pre><code class="language-js">CryptoJS.SHA256(index + previousHash + timestamp + data + nonce)</code></pre><p>L'algoritmo SHA256 calcolerà un hash univoco, dati questi input. Gli stessi input restituiranno sempre lo stesso hash.</p><h4 id="hai-notato-i-quattro-0-iniziali-nell-hash-del-blocco"><strong><strong>Hai notato i quattro 0 iniziali nell'hash del blocco?</strong></strong></h4><p>I quattro 0 iniziali sono un requisito minimo per un hash valido. Il numero di 0 iniziali richiesti è chiamato <strong><strong>difficoltà</strong></strong> .</p><pre><code class="language-js">function isValidHashDifficulty(hash, difficulty) {
  for (var i = 0, b = hash.length; i &lt; b; i ++) {
      if (hash[i] !== '0') {
          break;
      }
  }
  return i &gt;= difficulty;
}</code></pre><p>Questo è anche noto come il sistema <a href="https://en.wikipedia.org/wiki/Proof-of-work_system" rel="noopener">Proof-of-Work</a> .</p><h3 id="cos-un-nonce"><strong><strong>Cos'è un nonce?</strong></strong></h3><p>Un nonce è un numero utilizzato per trovare un hash valido.</p><pre><code class="language-js">let nonce = 0;
let hash;
let input;

while(!isValidHashDifficulty(hash)) {     
  nonce = nonce + 1;
  input = index + previousHash + timestamp + data + nonce;
  hash = CryptoJS.SHA256(input)
}</code></pre><p>Il nonce itera finché l'hash non è valido. Nel nostro caso, un hash valido ha almeno quattro 0 iniziali. Il processo per trovare un nonce che corrisponda a un hash valido è il <strong><strong>mining</strong></strong> .</p><p><strong><strong>All'aumentare</strong></strong> della difficoltà, il numero di possibili hash validi <strong><strong>diminuisce</strong></strong><em><em>. </em></em>Con meno hash validi possibili, ci vuole più potenza di elaborazione per trovare un hash valido.</p><h3 id="perch-importante"><strong><strong>Perché è importante?</strong></strong></h3><p>È importante perché mantiene immutabile la blockchain.</p><p>Se abbiamo la seguente blockchain A → B → C, e qualcuno vuole cambiare i dati sul Blocco A. Ecco cosa succede:</p><ol><li>Modifiche ai dati sul blocco A.</li><li>L'hash del blocco A cambia perché i dati vengono utilizzati per calcolare l'hash.</li><li>Il blocco A diventa non valido perché il suo hash non ha più quattro 0 iniziali.</li><li>L'hash del blocco B cambia perché l'hash del blocco A è stato utilizzato per calcolare l'hash del blocco B.</li><li>Il blocco B diventa non valido perché il suo hash non ha più quattro 0 iniziali.</li><li>L'hash del blocco C cambia perché l'hash del blocco B è stato utilizzato per calcolare l'hash del blocco C.</li><li>Il blocco C diventa non valido perché il suo hash non ha più quattro 0 iniziali.</li></ol><p>L'unico modo per mutare un blocco sarebbe minare di nuovo il blocco e tutti i blocchi successivi. Poiché vengono sempre aggiunti nuovi blocchi, è quasi impossibile mutare la blockchain.</p><p>Spero che questo tutorial ti sia stato utile!</p><p>Se desideri provare una versione web della demo, vai su <a href="http://blockchaindemo.io/" rel="noopener">http://blockchaindemo.io</a></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cos'è Blockchain e come funziona? ]]>
                </title>
                <description>
                    <![CDATA[ Se sei appassionato di tecnologia, ci sono buone possibilità che tu abbia sentito i termini Bitcoin, Crypto, Ethereum o anche "registri distribuiti e decentralizzati". Probabilmente hai sentito parlare di criptovaluta e algoritmi di crittografia, della fine degli "intermediari" e così via. Comunemente si è portati a pensare che le criptovalute ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/cose-blockchain-e-come-funziona/</link>
                <guid isPermaLink="false">62210bd7db2217050c2ed37f</guid>
                
                    <category>
                        <![CDATA[ blokchain ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web3 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Mon, 07 Mar 2022 08:26:40 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/03/5f9c9ca4740569d1a4ca335e.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/what-is-blockchain-and-how-does-it-work/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What is Blockchain and how does it work?</a>
      </p><p>Se sei appassionato di tecnologia, ci sono buone possibilità che tu abbia sentito i termini Bitcoin, Crypto, Ethereum o anche "registri distribuiti e decentralizzati".</p><p>Probabilmente hai sentito parlare di criptovaluta e algoritmi di crittografia, della fine degli "intermediari" e così via.</p><p>Comunemente si è portati a pensare che le criptovalute (es: Bitcoin, Ripple, Ethereum, Litecoin, ecc.) e la Blockchain siano la stessa cosa. Ma non così.</p><p><a href="https://en.wikipedia.org/wiki/Cryptocurrency">Le criptovalute</a> sono un'applicazione intelligente di una tecnologia molto più intelligente: <a href="http://en.wikipedia.org/wiki/Blockchain_(database)" rel="nofollow noopener">la Blockchain</a> .</p><p>In questo post tratterò alcuni dei concetti di base della Blockchain in modo da capire di cosa si tratta, come deve essere concettualizzata e cosa si può costruire su di essa.</p><p>Ma come per tutte le cose, ha più senso se capisci <em><em>perché</em></em> sono state inventate, prima di entrare in quello che fanno. In questo modo ti sarà più facile capire per quale problema da risolvere è stata progettata la blockchain.</p><h2 id="perch-usare-blockchain"><strong>Perché usare blockchain?</strong></h2><p>Ottima domanda. Sono così felice che tu l'abbia chiesto. Sediamoci e facciamo un piccolo esperimento mentale.</p><p>Cosa succede se tu e il tuo migliore amico conducete <em><em><em><em>indipendentemente</em></em> e separatamente</em></em> la stessa campagna di petizioni? Diciamo che è per la causa "Liberate i criceti".</p><p>Diciamo che la conduci rispettando una sequenza identica al tuo amico e nello stesso sobborgo, ma tiri fuori un diverso numero di adesioni alla petizione. Quale versione della petizione firmata è la “fonte di verità”?</p><p>Dovresti risalire lungo i due elenchi di firme, una firma alla volta, per individuare l'<em><em><em><em>ultima</em></em></em></em> discrepanza. E poi dovresti lavorare più indietro per identificare il primo risultato che diverge tra le due liste. Prima di tale punto di origine della divergenza, tutte le altre firme nei due elenchi dovrebbero corrispondere.</p><p>Quindi una cosa è sicura. Prima di questo punto di divergenza, entrambe le liste sono in accordo, quindi quelle firme rappresentano il numero minimo di persone che hanno firmato per sostenere la liberazione dei criceti.</p><p>Sebbene possa funzionare bene per criceti e piccoli sondaggi suburbani, non funziona così bene nel mondo digitale. Oppure votazioni, operazioni bancarie, transazioni finanziarie, trasferimento di proprietà fondiarie, adempimento di obblighi contrattuali, ecc. Sono necessarie "terze parti di fiducia" indipendenti per verificare una catena di eventi e rassicurarti solennemente che la "catena di custodia" non è stata interrotta.</p><p>Una "catena di custodia" a volte può anche essere chiamata "provenienza" - entrambe significano la stessa cosa: la sequenza di eventi storici relativi ai dati in questione.</p><p>Ecco perché ci sono governi che hanno l'ultima parola sulla tua identità, e i voti devono essere contati fisicamente e ricontati da centinaia di volontari, e gli impiegati in uffici squallidi tengono registri e certificati per confermare se possiedi o meno la tua fattoria o la staccionata bianca del bungalow.</p><p>Ecco perché hai bisogno di intermediari finanziari per assicurarti che quando acquisti il tuo pupazzo da collezione di Darth Vader, utilizzando una carta di credito, il denaro (valore) venga "rimosso" dal tuo account e "immesso" sul conto del venditore.</p><p>Questo è tecnicamente chiamato il "<a href="https://en.wikipedia.org/wiki/Double-spending">problema della doppia spesa</a>": come ci si assicura di non spendere gli stessi soldi due volte? Senza qualcuno che lo faccia, potresti spendere i soldi e allo stesso tempo continuare a possedere quei soldi stessi.</p><p>Quindi è davvero un grosso problema: la vita moderna richiede che ci affidiamo, ci fidiamo e paghiamo intermediari di terze parti "fidati" per garantire che il valore (il denaro) effettivamente "passi di mano" digitalmente. Ecco perché esistono Visa e MasterCard e perché PayPal e altri si collegano ai tuoi conti bancari.</p><blockquote>Al centro del perché della Blockchain c'è questo problema: come fai a sapere che una sequenza di eventi non è stata manomessa per alterare lo stato attuale?</blockquote><p>È qui che si inserisce la Blockchain. Chiaro finora?</p><h2 id="come-funziona-blockchain"><strong>Come funziona Blockchain</strong></h2><p>Allo scopo di comunicare un concetto con semplicità, posso prendermi delle libertà con alcuni degli aspetti tecnici e nascosti di questa tecnologia. Il mio obiettivo è farti capire di cosa si tratta e avere un modello mentale di come funziona. Per questo, potrei aver bisogno di essere un po' sciolto con la precisione al fine di migliorare le probabilità di comprensione, specialmente per i non madrelingua.</p><p>Per la precisione, è essenziale ricordare che la Blockchain è una tecnologia, un codice software matematicamente complesso. E Bitcoin (o Ethereum o qualsiasi altra criptovaluta offerta) sono solo applicazioni di questa tecnologia.</p><p>Quindi i principi chiave sono:</p><ul><li>Le blockchain vengono "estratte" (prodotte attraverso il dispendio di sforzi, come nell'estrazione dell'oro) da computer potenti e affamati di risorse – chiamati nodi, che si trovano sulla stessa rete.</li><li>Catene di registrazioni di transazioni crittografate digitalmente e con timestamp sono raggruppate in "blocchi", che vengono mantenuti su un "registro" da ciascun nodo. Quando le transazioni vengono aggiunte a un blocco, i blocchi vengono collegati tra loro in modo lineare e cronologico come "catene". Quindi l'intero record/registro viene sincronizzato attraverso la rete di nodi in modo tale che tutte le "catene" di blocchi sui nodi dovrebbero raccontare la stessa identica cosa circa l'iter di una determinata transazione. Quindi otteniamo "blocco + catena = blockchain". È una lunga e complicata lista concatenata.</li><li>Ogni blocco in una catena ha il proprio ID, un hash crittografico unico e specifico per ogni blocco. Quell'hash viene anche memorizzato nel blocco <em><em>successivo della catena, causando un collegamento. </em></em>Un blocco può memorizzare migliaia di transazioni e la più piccola modifica ai dati di quel blocco risulterebbe in un nuovo hash. Quindi, se un hash cambia ma il blocco successivo ha un hash diverso, sappiamo che alcuni dati nel blocco precedente sono stati manomessi.</li><li>Man mano che centinaia diventano migliaia di nodi (e ne vengono aggiunti altri continuamente), ogni nodo deve "concordare" sulla cronologia dei blocchi/registro – questo è chiamato "consenso critico". Uno dei modi in cui si ottiene il consenso è attraverso l'hash crittografico di cui abbiamo parlato prima.</li><li>In caso di discrepanze nel registro (ad esempio l'hash di un blocco non corrisponde al riferimento del blocco successivo all'hash del blocco precedente), il registro con la catena più lunga di transazioni valide incorporate sarà quello “corretto” – la fonte di verità. Eventuali nodi che lavorano su altri nodi (versioni più corte) della catena passano a quella più lunga. Ciò mantiene il consenso critico (questo concetto è estremamente semplificato, ma per ora sufficiente).</li><li>Qualsiasi intercettazione o modifica malevola di un registro (di nuovo, ad esempio, quando l'hash di un blocco non corrisponde) creerebbe immediatamente una discrepanza con tutte le altre versioni. Avrebbe anche una "storia" di blocco più breve a confermarlo, il che rende quella versione manomessa un elemento sospetto nella rete blockchain dove la lunghezza conta (ehm).</li><li>Replicare quella discrepanza su <em><em><em><em>tutte</em></em></em></em> le versioni registro - l'intera rete blockchain - è un compito così enorme che è poco pratico dal punto di vista computazionale e accadrebbe solo se i malintenzionati avessero improvvisamente il controllo sulla <em><em><em><em>maggior parte</em></em></em></em> dei nodi che estraggono blockchain e li cambiassero tutti piuttosto rapidamente. Questo tipo di attacco coordinato alla maggior parte dei nodi della rete è spesso chiamato <a href="https://en.bitcoin.it/wiki/Majority_attack">attacco del 51%</a> .</li></ul><p>È interessante notare che Satoshi Nakamoto afferma nel <a href="http://bitcoin.org/bitcoin.pdf">white paper originale di Bitcoin</a> ,</p><blockquote>“ <em><em><em><em>In quanto tale, la verifica è affidabile fintanto che i nodi onesti controllano la rete, ma è più vulnerabile se la rete è sopraffatta da un utente malintenzionato. </em></em></em></em>"</blockquote><p>Tuttavia, altrove <a href="http://en.wikipedia.org/wiki/Satoshi_Nakamoto" rel="nofollow noopener">lui/lei/l'organizzazione</a> (non sappiamo chi sia "Satoshi") sottolinea con calma che modificare le passate transazioni nei blocchi, sull'intera rete di nodi, richiederebbe all'attaccante di rifare la catena di custodia in quei blocchi, e tutti i blocchi aggiunti dopo. Quindi dovrebbe correre come un pazzo per raggiungere e superare il lavoro dei nodi che non sono sotto il suo controllo (in modo che possa riscrivere il registro, per così dire).</p><p>E per questo motivo, la "<em><em><em><em>probabilità che un attaccante lento </em></em></em>recuperi il ritardo,<em><em><em> diminuisce esponenzialmente man mano che vengono aggiunti blocchi successivi</em></em></em></em>".</p><p>L'assoluta complessità programmatica, il ritmo e il volume delle attività nodali rendono difficile per i falsari/attaccanti recuperare il ritardo, per non parlare di superare i nuovi blocchi costantemente estratti.</p><p>Questo ha senso. È come la bugia che dici a un membro della famiglia sul motivo per cui non hai potuto partecipare al saggio di flauto dei loro figli. E poi devi inseguire pazzamente tutti gli altri membri della famiglia e assicurarti di aver detto loro la stessa bugia in modo che quando la persona interessata a cui hai mentito tira fuori l'argomento, tutti siano consapevoli di questa bugia e tengano il tuo gioco. Sembra estenuante.</p><p>Per concludere, la caratteristica distintiva di una blockchain è che è un registro distribuito su molti, molti nodi ed è estremamente intensivo dal punto di vista computazionale (costoso) aggiungere nodi a quella rete.</p><p>Pertanto, ogni registro deve essere "consapevole" di tutte le transazioni e deve avere una versione concordata (che avrà la "catena di custodia" più lunga dietro di sé) attraverso l'intera rete a cui verrà aggiunta la transazione successiva.</p><blockquote><em><em>Come <a href="http://bitcoin.org/bitcoin.pdf" rel="nofollow noopener">dichiara Satoshi Nakamoto</a> nel white paper originale di Bitcoin, "<em><em>L'unico modo per confermare l'assenza di una transazione è essere a conoscenza di tutte le transazioni.</em></em>"</em></em></blockquote><p>È importante sottolineare che la blockchain "<a href="https://en.wikipedia.org/wiki/Disintermediation">dis-intermediata</a>" è fidata, quindi non dobbiamo pagare commissioni di transazione a "terze parti fidate" per essere affidabili e mantenerci onesti noi e le controparti con cui trattiamo . La blockchain garantisce in modo programmatico la verità (provenienza) della cronologia delle transazioni in essa contenute.</p><h3 id="allora-perch-dovremmo-preoccuparci"><strong>Allora perché dovremmo preoccuparci?</strong></h3><p>Ebbene, eliminando la necessità di “intermediari di fiducia” qualsiasi intermediario che fa pagare un compenso modesto per averci dato il dono della certezza ha bisogno di trovare un nuovo lavoro. E questo ha un impatto sulle banche che tradizionalmente offrono tali servizi assicurativi.</p><p>Significa anche che possiamo programmare "<a href="https://en.wikipedia.org/wiki/Smart_contract">contratti intelligenti</a>" tra il promittente e il promesso che si accorgono automaticamente (digitalmente) se quella promessa è stata mantenuta o meno.</p><p>Ciò ha consentito a un'artista davvero esperta di tecnologia come <a href="http://fortune.com/2016/09/22/blockchain-music-disruption/" rel="nofollow noopener">Imogen Heap di vendere la sua musica direttamente</a> al suo pubblico di ascolto e di riscuotere le sue quote direttamente da loro piuttosto che perdere la maggior parte dei guadagni per etichette discografiche, manager e altri "intermediari di fiducia".</p><p>Probabilmente cambierà il modo in cui la proprietà intellettuale sarà protetta, accessibile, condivisa, distribuita e sviluppata su Internet.</p><p>Potrebbe anche significare che la flotta di conducenti di Uber effettua transazioni direttamente con le persone che desiderano un passaggio piuttosto che affidarsi a Uber per coordinare e controllare il flusso di informazioni e denaro.</p><p>Potrebbe significare che potrei inviarti direttamente piccole somme di denaro praticamente senza commissioni (microtransazioni). Potrebbe significare che i milioni di persone senza banca nel mondo che hanno uno smartphone possono iniziare a effettuare transazioni ben oltre i loro tradizionali confini del mondo fisico.</p><p>In modo sorprendente, i governi stanno guardando oltre la semplice criptovaluta pensando al modo con cui implementare questa tecnologia , <a href="http://dci.mit.edu/assets/papers/spielman_thesis.pdf" rel="nofollow noopener">ad esempio per </a><a href="http://www.redherring.com/startups/georgia-pilots-sweden-ponders-blockchain-future-europes-land-registries/" rel="nofollow noopener">registrare la proprietà terriera</a> .</p><p>In effetti, potremmo creare un mondo di vere transazioni digitali peer-to-peer per il trasferimento di valore che sia distribuito, orizzontale, rimuova la necessità di fare affidamento sulla fiducia e soprattutto richieda una straordinaria potenza di calcolo per manometterlo. Queste transazioni potrebbero essere tra persone, macchine e dispositivi.</p><p>Potrebbe quindi offrire un nuovo paradigma di sicurezza per la protezione dei dati raccolti e trasferiti attraverso "l'internet delle cose".</p><p>Personalmente credo che la complessità del mondo moderno sia oscurata dietro i touchscreen intuitivi. La tecnologia blockchain sarà rapidamente integrata nel nostro universo tecnologico senza che noi ne saremo pienamente consapevoli, proprio come utilizziamo il DNA ricombinante del lievito per la produzione di insulina sintetica dagli anni '70.</p><p>I cambiamenti e i risparmi sui costi saranno ampiamente definiti cambiamenti tecnologici, come quella "cosa interweby" o qualche altra frase vaga e all-inclusive.</p><p>Un problema: funzionerà finché possiamo confidare che un "sistema senza fiducia" codificato e progettato dagli esseri umani (di chi ci fidiamo?) promuoverà la causa di processi senza-fiducia in un mondo diffidente e inaffidabile . Potrebbe essere necessario leggere questa frase più volte.</p><h2 id="ricapitolando"><strong>Ricapitolando</strong></h2><p>OK – ora dovresti essere ragionevolmente consapevole delle basi della blockchain. Ma se sei interessato c'è molto altro da imparare.</p><p>Puoi discutere se la blockchain sia utile o troppo pubblicizzata, rivoluzionaria o noiosa. Ma è difficile ignorare che è piuttosto interessante come concetto.</p><p>Ecco un video davvero fantastico di Anders Brownworth che spiega il tutto con un modello blockchain. Consiglio vivamente di guardarlo.</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.25%;" class="fluid-width-video-wrapper">
            <iframe src="https://www.youtube.com/embed/_160oMzblY8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="Contenuti incorporati" loading="lazy" name="fitvid0" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 22px; vertical-align: middle; position: absolute; top: 0px; left: 0px; width: 760px; height: 427.5px;"></iframe>
          </div>
        </div>
      </figure><p>E come esercizio di apprendimento, puoi costruire la tua blockchain direttamente nel tuo browser o nella tua riga di comando. Ecco un breve <a href="https://www.freecodecamp.org/news/how-does-blockchain-really-work-i-built-an-app-to-show-you-6b70cd4caf7d/">tutorial su come costruire la tua blockchain</a>.</p><p>Se hai commenti su questo articolo o pensi che avrei potuto spiegare meglio alcune parti di questo, twittami su <a href="https://twitter.com/zubinpratap">@ZubinPratap</a></p><p>Se vuoi saperne di più sul mio viaggio nel codice, dai un'occhiata <a href="http://podcast.freecodecamp.org/53-zubin-pratap-from-lawyer-to-developer">all'episodio 53</a> del <a href="http://podcast.freecodecamp.org/">podcast freeCodeCamp</a> , dove Quincy (fondatore di freeCodeCamp) e io condividiamo le nostre esperienze come cambi di carriera che potrebbero aiutarti nel tuo viaggio. Puoi anche accedere al podcast su <a href="https://itunes.apple.com/au/podcast/ep-53-zubin-pratap-from-lawyer-to-developer/id1313660749?i=1000431046274&amp;mt=2">iTunes</a> , <a href="https://www.stitcher.com/podcast/freecodecamp-podcast/e/59201373?autoplay=true">Stitcher</a> e <a href="https://open.spotify.com/episode/4lG0RGpzriG5vXRMgza05C">Spotify</a>.</p><p>Terrò anche alcuni AMA e webinar nei prossimi mesi. Se questo ti interessa, per favore fatemelo sapere andando <a href="http://www.matchfitmastery.com/">qui</a> . E, naturalmente, puoi anche twittarmi su <a href="https://twitter.com/zubinpratap">@ZubinPratap</a> .</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ La guida completa allo sviluppo Full Stack di Ethereum ]]>
                </title>
                <description>
                    <![CDATA[ In questo articolo imparerai come creare dApp full stack con React, Ethers.js, Solidity e Hardhat. Puoi trovare il codice per questo progetto qui [https://github.com/dabit3/full-stack-ethereum] . Il video corso per questo tutorial è qui [https://www.youtube.com/watch?v=a0osIaAOFSE]. Di recente mi sono unito a Edge & Node [https://twitter.com/edgeandnode] come Developer Relations Engineer e ho ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/la-guida-completa-allo-sviluppo-completo-di-ethereum/</link>
                <guid isPermaLink="false">621a4f54b6d6770504318ec4</guid>
                
                    <category>
                        <![CDATA[ blokchain ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web3 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Thu, 03 Mar 2022 09:29:34 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/02/full-stack-ethereum-article.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/full-stack-ethereum-development/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">The Complete Guide to Full Stack Ethereum Development</a>
      </p><p>In questo articolo imparerai come creare dApp full stack con React, Ethers.js, Solidity e Hardhat.</p><p>Puoi trovare il codice per questo progetto <a href="https://github.com/dabit3/full-stack-ethereum">qui</a> . Il video corso per questo tutorial è <a href="https://www.youtube.com/watch?v=a0osIaAOFSE">qui</a>.</p><p>Di recente mi sono unito a <a href="https://twitter.com/edgeandnode">Edge &amp; Node</a> come Developer Relations Engineer e ho approfondito lo sviluppo di contratti intelligenti con Ethereum. Ho scelto quello che penso sia lo stack migliore per la creazione di dApp full stack con Solidity:</p><ul><li>Client Framework – <strong><strong>React</strong></strong></li><li>Ambiente di sviluppo Ethereum – <a href="https://hardhat.org/"><strong><strong>Hardhat</strong></strong></a></li><li>Libreria Web client di Ethereum – <a href="https://docs.ethers.io/v5/"><strong><strong>Ethers.js</strong></strong></a></li><li>Livello API: <a href="https://thegraph.com/">Il protocollo Graph</a></li></ul><p>Però mi sono imbattuto in un problema mentre cercavo di capire tutto questo. Sebbene sia disponibile individualmente una documentazione abbastanza buona per ciascuno di questi strumenti, non c'è molto che ti aiuti a metterli tutti insieme e capire come funzionano tra loro.</p><p>Ci sono alcuni standard davvero buoni là fuori come <a href="https://github.com/austintgriffith/scaffold-eth">scaffold-eth</a> (che include anche Ethers, Hardhat e The Graph), ma potrebbero essere troppo da comprendere per le persone che hanno appena iniziato.</p><p>Volevo una guida end-to-end che mi mostrasse come creare app Ethereum full stack utilizzando le risorse, le librerie e gli strumenti più aggiornati.</p><p>Ecco cosa mi interessava:</p><ol><li>Come creare, distribuire e testare smart contract Ethereum su local, test e mainnet</li><li>Come spostarsi tra ambienti/reti locali, di test e di produzione</li><li>Come connettersi e interagire con i contratti utilizzando vari ambienti da un front-end come React, Vue, Svelte o Angular</li></ol><p>Dopo aver passato un po' di tempo a capire tutto questo, sono finalmente riuscito a usare lo stack di cui mi sentivo davvero a mio agio. Quindi ho pensato che sarebbe stato bello scrivere come costruire e testare un'app Ethereum full stack usando questo stack.</p><p>Spero che questa guida sia utile non solo per altre persone là fuori che potrebbero essere interessate a questo stack, ma anche per me stesso come riferimento futuro. Questo è quel riferimento.</p><h2 id="la-tecnologia-che-useremo"><strong><strong>La tecnologia che useremo</strong></strong></h2><p>Esaminiamo i pezzi principali che utilizzeremo e come si inseriscono nell'insieme.</p><h3 id="1-ambiente-di-sviluppo-di-ethereum"><strong><strong>1. Ambiente di sviluppo di Ethereum</strong></strong></h3><p>Quando crei contratti intelligenti, avrai bisogno di un modo per distribuire i tuoi contratti, eseguire test ed eseguire il debug del codice Solidity senza dover gestire ambienti live.</p><p>Avrai anche bisogno di un modo per compilare il tuo codice Solidity in codice che può essere eseguito in un'applicazione lato client, nel nostro caso, un'app React. Impareremo di più su come questo funziona un più avanti.</p><p>Hardhat è un ambiente di sviluppo Ethereum e un framework progettato per lo sviluppo full stack, ed è il framework che userò per questo tutorial.</p><p>Altri strumenti simili nell'ecosistema sono <a href="https://www.trufflesuite.com/ganache">Ganache</a> e <a href="https://www.trufflesuite.com/">Truffle</a> .</p><h3 id="2-libreria-web-client-di-ethereum"><strong><strong>2. Libreria</strong> <strong>Web client di Ethereum</strong></strong></h3><p>Nella nostra app React, avremo bisogno di un modo per interagire con gli smart contract che sono stati implementati. Avremo bisogno di un modo per leggere i dati e inviare nuove transazioni.</p><p><a href="https://docs.ethers.io/v5/">ethers.js</a> mira ad essere una libreria completa e compatta per interagire con Ethereum Blockchain e il suo ecosistema da applicazioni JavaScript lato client come React, Vue, Angular o Svelte. È la libreria che useremo.</p><p>Un'altra opzione popolare nell'ecosistema è <a href="https://web3js.readthedocs.io/en/v1.3.4/">web3.js</a></p><h3 id="3-metamask"><strong><strong>3. </strong>Metamask</strong></h3><p><a href="https://metamask.io/download.html">Metamask</a> ti aiuta a gestire la gestione dell'account e a connettere l'utente corrente alla blockchain. MetaMask consente agli utenti di gestire i propri account e chiavi in ​​diversi modi isolandoli dal contesto del sito.</p><p>Una volta che un utente ha connesso il proprio portafoglio MetaMask, tu come sviluppatore puoi interagire con l'API Ethereum disponibile a livello globale (<code>window.ethereum</code>) che identifica gli utenti di browser compatibili con web3 (come gli utenti MetaMask). Ogni volta che richiedi una firma di transazione, MetaMask la richiederà all'utente in modo comprensibile.</p><h3 id="4-react"><strong><strong>4. </strong>React</strong></h3><p>React è una libreria JavaScript front-end per la creazione di applicazioni Web, interfacce utente e componenti dell'interfaccia utente. È gestito da Facebook e da molti sviluppatori e aziende individuali.</p><p>React e il suo ampio ecosistema di metaframework come <a href="https://nextjs.org/">Next.js</a>, <a href="https://www.gatsbyjs.com/">Gatsby</a>, <a href="https://redwoodjs.com/">Redwood</a>, <a href="https://blitzjs.com/">Blitz.js</a> e altri abilitano tutti i tipi di target di distribuzione inclusi SPA tradizionali, generatori di siti statici, rendering lato server e una combinazione di tutti e tre.</p><p>React continua apparentemente a dominare lo spazio front-end e penso che continuerà a farlo nel prossimo futuro e forse anche oltre.</p><h3 id="5-the-graph"><strong><strong>5. </strong>The Graph</strong></h3><p>Per la maggior parte delle app basate su blockchain come Ethereum, è difficile e dispendioso in termini di tempo leggere i dati direttamente dalla <em>chain</em>. Quindi in passato vedevi persone e aziende costruire il proprio server di indicizzazione centralizzato e servire le richieste API da questi server. Ciò richiede molte risorse ingegneristiche e hardware e interrompe le proprietà di sicurezza richieste per la decentralizzazione.</p><p>The Graph è un protocollo di indicizzazione per interrogare i dati blockchain, che ti consente di creare applicazioni completamente decentralizzate. Risolve questo problema esponendo un ricco livello di query GraphQL che le app possono utilizzare.</p><p>In questa guida non creeremo un sottografo per la nostra app, ma lo faremo in un tutorial futuro.</p><h2 id="cosa-costruiremo"><strong><strong>Cosa costruiremo</strong></strong></h2><p>In questo tutorial creeremo, implementeremo e ci collegheremo a un paio di contratti intelligenti di base:</p><ol><li>Un contratto per la creazione e l'aggiornamento di un messaggio sulla blockchain di Ethereum</li><li>Un contratto per il conio di token, che consente al proprietario del contratto di inviare token ad altri e di leggere i saldi dei token e consente ai proprietari dei nuovi token di inviarli anche ad altri.</li></ol><p>Realizzeremo anche un front-end React che consentirà a un utente di:</p><ol><li>Leggere il saluto dal contratto distribuito sulla blockchain</li><li>Aggiornare il saluto</li><li>Inviare i token appena coniati dal loro indirizzo a un altro indirizzo</li><li>Una volta che qualcuno ha ricevuto i token, consentire loro di inviare i propri token anche a qualcun altro</li><li>Leggere il saldo del token dal contratto distribuito sulla blockchain</li></ol><h3 id="prerequisiti"><strong><strong>Prerequisiti</strong></strong></h3><ol><li>Node.js installato sul tuo computer locale</li><li><a href="https://metamask.io/">Estensione MetaMask</a> Chrome installata nel tuo browser</li></ol><p>Non è necessario possedere alcun Ethereum per questa guida poiché utilizzeremo Ether falso/test su una rete di test per l'intero tutorial.</p><h2 id="come-iniziare-con-create-react-app"><strong><strong>Come iniziare con create-react-app</strong></strong></h2><p>Per iniziare, creeremo una nuova applicazione React:</p><pre><code class="language-sh">npx create-react-app react-dapp
</code></pre><p>Quindi, passa alla nuova directory e installa <a href="https://docs.ethers.io/v5/"><code>ethers.js</code></a> e &nbsp;<a href="https://github.com/nomiclabs/hardhat"><code>hardhat</code></a> utilizzando <strong><strong>NPM</strong></strong> o <strong><strong>Yarn</strong></strong> :</p><pre><code>npm install ethers hardhat @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers
</code></pre><h2 id="come-installare-e-configurare-un-ambiente-di-sviluppo-ethereum"><strong><strong>Come installare e configurare un ambiente di sviluppo Ethereum</strong></strong></h2><p>Quindi, inizializza un nuovo ambiente di sviluppo Ethereum con Hardhat:</p><pre><code class="language-sh">npx hardhat

? What do you want to do? Create a sample project
? Hardhat project root: &lt;Choose default path&gt;
</code></pre><p>Ora dovresti vedere i seguenti file e cartelle creati per te nella tua directory principale:</p><ul><li><strong><strong>hardhat.config.js</strong></strong> – L'intera configurazione di Hardhat (ovvero la configurazione, i plug-in e le attività personalizzate) è contenuta in questo file.</li><li><strong><strong>scripts</strong></strong> – Una cartella contenente uno script denominato <strong><strong>sample-script.js</strong></strong> che distribuirà il tuo smart contract una volta eseguito</li><li><strong><strong>test</strong></strong> – Una cartella contenente uno script di test di esempio</li><li><strong><strong>contracts</strong></strong> : una cartella contenente uno smart contract di Ethereum di esempio</li></ul><p>A causa di <a href="https://hardhat.org/metamask-issue.html">un problema di configurazione di MetaMask</a> , dobbiamo aggiornare l'ID della catena sulla nostra configurazione di HardHat in modo che sia <strong><strong>1337</strong></strong> . Abbiamo anche bisogno di aggiornare la posizione della cartella <a href="https://hardhat.org/guides/compile-contracts.html#artifacts">artifacts</a> per i nostri contratti compilati in modo che siano nella directory <strong><strong>src</strong></strong> della nostra app React.</p><p>Per effettuare questi aggiornamenti, apri <strong><strong>hardhat.config.js</strong></strong> e aggiorna il file <code>module.exports</code> in modo che assomigli a questo:</p><pre><code class="language-javascript">module.exports = {
  solidity: "0.8.3",
  paths: {
    artifacts: './src/artifacts',
  },
  networks: {
    hardhat: {
      chainId: 1337
    }
  }
};
</code></pre><h2 id="il-nostro-smart-contract"><strong><strong>Il nostro </strong>smart contract</strong></h2><p>Quindi, diamo un'occhiata al contratto di esempio che abbiamo in <strong><strong>contract/Greeter.sol</strong></strong> :</p><pre><code class="language-solidity">//SPDX-License-Identifier: MIT
pragma solidity ^0.7.0;

import "hardhat/console.sol";


contract Greeter {
  string greeting;

  constructor(string memory _greeting) {
    console.log("Deploying a Greeter with greeting:", _greeting);
    greeting = _greeting;
  }

  function greet() public view returns (string memory) {
    return greeting;
  }

  function setGreeting(string memory _greeting) public {
    console.log("Changing greeting from '%s' to '%s'", greeting, _greeting);
    greeting = _greeting;
  }
}
</code></pre><p>Questo è un contratto intelligente molto semplice. Quando viene distribuito, imposta una variabile Greeting ed espone una funzione (<code>greet</code>) che può essere chiamata per restituire il saluto.</p><p>Espone inoltre una funzione che consente a un utente di aggiornare il saluto (<code>setGreeting</code>). Una volta distribuiti sulla blockchain di Ethereum, questi metodi saranno disponibili per l'interazione di un utente.</p><p>Apportiamo una piccola modifica allo smart contract. Poiché impostiamo la versione di solidity del nostro compilatore su <code>0.8.3</code> in hardhat.config.js<strong><strong>,</strong></strong> assicuriamoci anche di aggiornare il nostro contratto per utilizzare la stessa versione di solidity:</p><pre><code class="language-solidity">// contracts/Greeter.sol
pragma solidity ^0.8.3;
</code></pre><h3 id="come-leggere-e-scrivere-sulla-blockchain-di-ethereum"><strong><strong>Come leggere e scrivere sulla blockchain di Ethereum</strong></strong></h3><p>Esistono due modi per interagire con uno smart contract: lettura o scrittura delle transazioni. Nel nostro contratto, <code>greet</code> può essere considerato transazione in lettura e <code>setGreeting</code> può essere considerato transazione in scrittura.</p><p>Quando si scrive o si inizializza una transazione, è necessario pagare affinché la transazione venga scritta sulla blockchain. Per farlo funzionare, devi pagare il <a href="https://www.investopedia.com/terms/g/gas-ethereum.asp#:~:text=What%20Is%20Gas%20(Ethereum)%3F,on%20the%20Ethereum%20blockchain%20platform">gas</a> che è la commissione o il prezzo richiesto per condurre con successo una transazione ed eseguire un contratto sulla blockchain di Ethereum.</p><p>Finché stai solo leggendo dalla blockchain e non modifichi o aggiorni nulla, non è necessario effettuare una transazione e non ci saranno gas o costi per farlo. La funzione che chiami viene poi svolta solo dal nodo a cui sei connesso, quindi non devi pagare alcun gas e la lettura è gratuita.</p><p>Dalla nostra app React, interagiremo con lo smart contract utilizzando una combinazione della libreria &nbsp;<code>ethers.js</code>, indirizzo del contratto e <a href="https://docs.soliditylang.org/en/v0.5.3/abi-spec.html">ABI</a> che verrà creato dal contratto da Hardhat.</p><p>Che cos'è un ABI? ABI sta per interfaccia binaria dell'applicazione. Puoi pensarla come l'interfaccia tra la tua applicazione lato client e la blockchain di Ethereum in cui viene distribuito lo smart contract con cui interagirai.</p><p>Gli ABI sono in genere compilati da smart contract di Solidity con un framework di sviluppo come Hardhat. Spesso puoi trovare gli ABI per uno smart contract anche su <a href="https://etherscan.io/">Etherscan</a></p><h3 id="come-compilare-l-abi"><strong><strong>Come compilare l'ABI</strong></strong></h3><p>Ora che abbiamo esaminato lo smart contract di base e sappiamo cosa sono gli ABI, compiliamo un ABI per il nostro progetto.</p><p>Per farlo, vai alla riga di comando ed esegui il seguente comando:</p><pre><code class="language-sh">npx hardhat compile
</code></pre><p>Ora dovresti vedere una nuova cartella denominata <strong><strong>artifacts</strong></strong> nella directory <strong><strong>src</strong></strong> . Il file <strong><strong>artifacts/contracts/Greeter.json</strong></strong> contiene l'ABI come una delle proprietà. Quando dobbiamo usare l'ABI, possiamo importarlo dal nostro file JavaScript:</p><pre><code class="language-javascript">import Greeter from './artifacts/contracts/Greeter.sol/Greeter.json'
</code></pre><p>Possiamo quindi fare riferimento all'ABI in questo modo:</p><pre><code>console.log("Greeter ABI: ", Greeter.abi)
</code></pre><blockquote>Nota che Ethers.js abilita anche <a href="https://blog.ricmoo.com/human-readable-contract-abis-in-ethers-js-141902f4d917">ABI leggibili dall'uomo</a> , ma non ne parleremo durante questo tutorial.</blockquote><h3 id="come-distribuire-e-utilizzare-una-rete-locale-blockchain"><strong><strong>Come distribuire e utilizzare una rete locale / Blockchain</strong></strong></h3><p>Quindi, distribuiamo il nostro contratto intelligente su una blockchain locale in modo da poterlo testare.</p><p>Per eseguire la distribuzione nella rete locale, devi prima avviare il nodo di test locale. Per fare ciò, apri la CLI ed esegui il seguente comando:</p><pre><code class="language-sh">npx hardhat node
</code></pre><p>Quando eseguiamo questo comando, dovresti vedere un elenco di indirizzi e chiavi private.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e176nc82ik77hei3a48s.jpg" class="kg-image" alt="Indirizzi di nodi hardhat" width="2000" height="1204" loading="lazy"></figure><p>Si tratta di 20 account di prova e indirizzi creati per noi che possiamo utilizzare per implementare e testare i nostri contratti intelligenti. Ogni account è anche caricato con 10.000 falsi Ether. Tra poco impareremo come importare l'account di prova in MetaMask in modo da poterlo utilizzare.</p><p>Successivamente, dobbiamo distribuire il contratto alla rete di test. Per prima cosa aggiorna il nome di <strong><strong>scripts/sample-script.js</strong></strong> in <strong><strong>scripts/deploy.js</strong></strong> .</p><p>Ora possiamo eseguire lo script di distribuzione e dare un flag alla CLI in modo da distribuire sulla nostra rete locale:</p><pre><code class="language-sh">npx hardhat run scripts/deploy.js --network localhost
</code></pre><p>Una volta eseguito questo script, lo smart contract dovrebbe essere distribuito sulla rete di test locale e dovremmo essere quindi in grado di iniziare a interagire con esso.</p><blockquote>Quando il contratto è stato distribuito, utilizzava il primo account creato quando abbiamo avviato la rete locale.</blockquote><p>Se guardi l'output della CLI, dovresti essere in grado di vedere qualcosa del genere:</p><pre><code class="language-sh">Greeter deployed to: 0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0
</code></pre><p>Questo indirizzo è quello che useremo nella nostra applicazione client per parlare con lo smart contract. Mantieni questo indirizzo disponibile poiché dovremo usarlo quando ci connettiamo ad esso dall'applicazione client.</p><p>Per inviare transazioni allo smart contract, dovremo connettere il nostro portafoglio MetaMask utilizzando uno degli account creati quando abbiamo eseguito <code>npx hardhat node</code>. Nell'elenco dei contratti che la CLI ha stampato, dovresti vedere sia un <strong><strong>numero</strong></strong> di conto che una <strong><strong>chiave privata</strong></strong> :</p><pre><code class="language-bash">➜  react-defi-stack git:(main) npx hardhat node
Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/

Accounts
========
Account #0: 0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266 (10000 ETH)
Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80

...
</code></pre><p>Possiamo importare questo account in MetaMask per iniziare a utilizzare alcuni dei falsi Eth disponibili lì. Per fare ciò, prima apri MetaMask e aggiorna la rete in modo che sia Localhost 8545:</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qnbsbcm4y1md6cwjttpx.jpg" class="kg-image" alt="MetaMask Localhost" width="1500" height="1246" loading="lazy"></figure><p>Successivamente, in MetaMask, fai clic su <strong><strong>Import </strong>A<strong>ccount</strong></strong> dal menu degli account:</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n7vbzlov869gwk9rtwl1.jpg" class="kg-image" alt="Importa conto" width="1500" height="1246" loading="lazy"></figure><p>Copia, quindi incolla una delle <strong><strong>chiavi private</strong></strong> stampate nella CLI e fai clic su <strong><strong>Import</strong></strong>. Una volta importato l'account, dovresti vedere l'Eth nell'account:</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x5lob4yug3jznhy9z0qt.jpg" class="kg-image" alt="Conto importato" width="1500" height="1246" loading="lazy"></figure><p>Ora che abbiamo distribuito il nostro contratto intelligente e configurato il nostro account, possiamo iniziare a interagire con esso dall'app React.</p><h3 id="come-collegare-il-client-react"><strong><strong>Come collegare il client React</strong></strong></h3><p>In questo tutorial non ci preoccuperemo di creare una bella interfaccia utente con CSS e tutto il resto: invece ci concentreremo al 100% sulle funzionalità di base per renderti operativo velocemente. Da lì poi, puoi prenderlo e farlo sembrare bello, se lo desideri.</p><p>Detto questo, esaminiamo i due obiettivi che desideriamo dalla nostra applicazione React:</p><ol><li>Recupera il valore corrente di <code>greeting</code> dal contratto intelligente</li><li>Consenti a un utente di aggiornare il valore di <code>greeting</code></li></ol><p>Quindi, come lo realizziamo? Ecco le cose che dobbiamo fare perché ciò avvenga:</p><ol><li>Creare un campo di input e uno stato locale per gestire il valore dell'input (per aggiornare il <code>greeting</code>)</li><li>Consentire all'applicazione di connettersi all'account MetaMask dell'utente per firmare le transazioni</li><li>Creare le funzioni per leggere e scrivere sullo smart contract</li></ol><p>Per fare ciò, apri <code>src/App.js</code> e aggiornalo con il seguente codice, impostando il valore di <code>greeterAddress</code> all'indirizzo del tuo smart contract:</p><pre><code class="language-js">import './App.css';
import { useState } from 'react';
import { ethers } from 'ethers'
import Greeter from './artifacts/contracts/Greeter.sol/Greeter.json'

// Aggiorna con l'indirizzo del contratto stampato dalla CLI quando è stato distribuito 
const greeterAddress = "indirizzo-del-tuo-contratto"

function App() {
  // memorizza il saluto nella stato locale
  const [greeting, setGreetingValue] = useState()

  // richiede l'accesso all'account MetaMask dell'utente
  async function requestAccount() {
    await window.ethereum.request({ method: 'eth_requestAccounts' });
  }

  // chiama lo smart contract, legge il valore attuale del saluto 
  async function fetchGreeting() {
    if (typeof window.ethereum !== 'undefined') {
      const provider = new ethers.providers.Web3Provider(window.ethereum)
      const contract = new ethers.Contract(greeterAddress, Greeter.abi, provider)
      try {
        const data = await contract.greet()
        console.log('data: ', data)
      } catch (err) {
        console.log("Error: ", err)
      }
    }    
  }

  // chiama lo smart contract, invia un aggiornamento
  async function setGreeting() {
    if (!greeting) return
    if (typeof window.ethereum !== 'undefined') {
      await requestAccount()
      const provider = new ethers.providers.Web3Provider(window.ethereum);
      const signer = provider.getSigner()
      const contract = new ethers.Contract(greeterAddress, Greeter.abi, signer)
      const transaction = await contract.setGreeting(greeting)
      await transaction.wait()
      fetchGreeting()
    }
  }

  return (
    &lt;div className="App"&gt;
      &lt;header className="App-header"&gt;
        &lt;button onClick={fetchGreeting}&gt;Fetch Greeting&lt;/button&gt;
        &lt;button onClick={setGreeting}&gt;Set Greeting&lt;/button&gt;
        &lt;input onChange={e =&gt; setGreetingValue(e.target.value)} placeholder="Set greeting" /&gt;
      &lt;/header&gt;
    &lt;/div&gt;
  );
}

export default App;
</code></pre><p>Per testarlo, avvia il server React:</p><pre><code class="language-sh">npm start
</code></pre><p>Quando l'app viene caricata, dovresti essere in grado di recuperare il saluto corrente e stamparlo sulla console. Dovresti anche essere in grado di aggiornare il saluto firmando il contratto con il tuo portafoglio MetaMask e spendendo il falso Ether.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9a57jbzrwylr2l0rujxm.png" class="kg-image" alt="Impostazione e ottenere il valore di saluto" width="1538" height="1294" loading="lazy"></figure><h3 id="come-distribuire-e-utilizzare-una-rete-di-test-dal-vivo"><strong><strong>Come distribuire e utilizzare una rete di test dal vivo</strong></strong></h3><p>Esistono diverse reti di test di Ethereum come Ropsten, Rinkeby o Kovan a cui possiamo anche distribuire per avere una versione pubblicamente accessibile del nostro contratto disponibile senza doverla distribuire sulla mainnet.</p><p>In questo tutorial verrà distribuito nella rete di test <strong><strong>Ropsten .</strong></strong></p><p>Per iniziare, aggiorna prima il tuo portafoglio MetaMask per connetterti alla rete Ropsten.</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k85gplgp26wp58l95bhr.jpg" class="kg-image" alt="Rete Ropsten" width="1500" height="1246" loading="lazy"></figure><p>Quindi, invia a te stesso un Ether di prova da utilizzare durante il resto di questo tutorial visitando <a href="https://faucet.ropsten.be/">questo faucet di prova</a> .</p><p>Possiamo accedere a Ropsten (o a qualsiasi altra rete di test) iscrivendoci a un servizio come <a href="https://infura.io/dashboard/ethereum/cbdf7c5eee8b4e2b91e76b77ffd34533/settings">Infura</a> o <a href="https://www.alchemyapi.io/">Alchemy</a> (sto usando Infura per questo tutorial).</p><p>Dopo aver creato l'app in Infura o Alchemy, ti verrà assegnato un endpoint simile a questo:</p><pre><code>https://ropsten.infura.io/v3/your-project-id
</code></pre><p>Assicurati di impostare <strong><strong>ALLOWLIST ETHEREUM ADDRESSES</strong></strong> nella configurazione dell'app Infura o Alchemy per includere l'indirizzo del portafoglio dell'account da cui eseguirai la distribuzione.</p><p>Per eseguire il deployment nella rete di test, è necessario aggiornare la nostra configurazione di Hardhat con alcune informazioni di rete aggiuntive. Una delle cose che dobbiamo impostare è la chiave privata del portafoglio da cui eseguiremo il deployment.</p><p>Per ottenere la chiave privata, puoi esportarla da MetaMask.</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/deod3d6qix8us12t17i4.jpg" class="kg-image" alt="Esporta chiave privata" width="2060" height="1246" loading="lazy"></figure><blockquote>Suggerirei di non codificare questo valore nella tua app, ma invece di impostarlo come una variabile di ambiente.</blockquote><p>Quindi, aggiungi una proprietà <code>networks</code> con la seguente configurazione:</p><pre><code class="language-js">module.exports = {
  defaultNetwork: "hardhat",
  paths: {
    artifacts: './src/artifacts',
  },
  networks: {
    hardhat: {},
    ropsten: {
      url: "https://ropsten.infura.io/v3/your-project-id",
      accounts: [`0x${your-private-key}`]
    }
  },
  solidity: "0.7.3",
};
</code></pre><p>Per eseguire la distribuzione, avviare il seguente script:</p><pre><code class="language-sh">npx hardhat run scripts/deploy.js --network ropsten
</code></pre><p>Una volta distribuito il contratto, dovresti essere in grado di iniziare a interagire con esso. Ora dovresti essere in grado di visualizzare il contratto live su <a href="https://ropsten.etherscan.io/">Etherscan Ropsten Testnet Explorer</a></p><h2 id="come-coniare-i-gettoni"><strong><strong>Come coniare i gettoni</strong></strong></h2><p>Uno dei casi d'uso più comuni degli smart contract è la creazione di token. Diamo un'occhiata a come possiamo farlo. Dal momento che sappiamo un po' di più su come funziona tutto questo, andremo un po' più veloci.</p><p>Nella directory principale dei <strong><strong>contracts</strong></strong>, crea un nuovo file denominato <strong><strong>Token.sol</strong></strong> .</p><p>Quindi, aggiorna <strong><strong>Token.sol</strong></strong> con il seguente contratto intelligente:</p><pre><code class="language-solidity">//SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;

import "hardhat/console.sol";

contract Token {
  string public name = "Nader Dabit Token";
  string public symbol = "NDT";
  uint public totalSupply = 1000000;
  mapping(address =&gt; uint) balances;

  constructor() {
    balances[msg.sender] = totalSupply;
  }

  function transfer(address to, uint amount) external {
    require(balances[msg.sender] &gt;= amount, "Gettoni non sufficienti");
    balances[msg.sender] -= amount;
    balances[to] += amount;
  }

  function balanceOf(address account) external view returns (uint) {
    return balances[account];
  }
}
</code></pre><blockquote>Tieni presente che questo contratto token è solo a scopo dimostrativo e non è conforme a <a href="https://eips.ethereum.org/EIPS/eip-20">ERC20</a> . Tratteremo i token ERC20 in seguito.</blockquote><p>Questo contratto creerà un nuovo token chiamato "Nader Dabit Token" e imposterà la fornitura a 1000000.</p><p>Quindi, compila questo contratto:</p><pre><code class="language-sh">npx hardhat compile
</code></pre><p>Ora, aggiorna lo script di distribuzione su <strong><strong>scripts/deploy.js</strong></strong> per includere questo nuovo contratto Token:</p><pre><code class="language-javascript">const hre = require("hardhat");

async function main() {
  const [deployer] = await hre.ethers.getSigners();

  console.log(
    "Distribuzione di contratti con l'account:",
    deployer.address
  );
  
  const Greeter = await hre.ethers.getContractFactory("Greeter");
  const greeter = await Greeter.deploy("Hello, World!");

  const Token = await hre.ethers.getContractFactory("Token");
  const token = await Token.deploy();
  
  await greeter.deployed();
  await token.deployed();

  console.log("Greeter distribuito a:", greeter.address);
  console.log("Token distribuito a:", token.address);
}

main()
  .then(() =&gt; process.exit(0))
  .catch(error =&gt; {
    console.error(error);
    process.exit(1);
  });
</code></pre><p>Ora possiamo distribuire questo nuovo contratto sulla rete locale o Ropsten:</p><pre><code class="language-sh">npx hardhat run scripts/deploy.js --network localhost
</code></pre><p>Una volta distribuito il contratto, puoi iniziare a inviare questi token ad altri indirizzi.</p><p>Per fare ciò, aggiorniamo il codice client di cui avremo bisogno per farlo funzionare:</p><pre><code class="language-javascript">import './App.css';
import { useState } from 'react';
import { ethers } from 'ethers'
import Greeter from './artifacts/contracts/Greeter.sol/Greeter.json'
import Token from './artifacts/contracts/Token.sol/Token.json'

const greeterAddress = "il-tuo-indirizzo-di-contratto"
const tokenAddress = "il-tuo-indirizzo-di-contratto"

function App() {
  const [greeting, setGreetingValue] = useState()
  const [userAccount, setUserAccount] = useState()
  const [amount, setAmount] = useState()

  async function requestAccount() {
    await window.ethereum.request({ method: 'eth_requestAccounts' });
  }

  async function fetchGreeting() {
    if (typeof window.ethereum !== 'undefined') {
      const provider = new ethers.providers.Web3Provider(window.ethereum)
      console.log({ provider })
      const contract = new ethers.Contract(greeterAddress, Greeter.abi, provider)
      try {
        const data = await contract.greet()
        console.log('data: ', data)
      } catch (err) {
        console.log("Error: ", err)
      }
    }    
  }

  async function getBalance() {
    if (typeof window.ethereum !== 'undefined') {
      const [account] = await window.ethereum.request({ method: 'eth_requestAccounts' })
      const provider = new ethers.providers.Web3Provider(window.ethereum);
      const contract = new ethers.Contract(tokenAddress, Token.abi, provider)
      const balance = await contract.balanceOf(account);
      console.log("Balance: ", balance.toString());
    }
  }

  async function setGreeting() {
    if (!greeting) return
    if (typeof window.ethereum !== 'undefined') {
      await requestAccount()
      const provider = new ethers.providers.Web3Provider(window.ethereum);
      console.log({ provider })
      const signer = provider.getSigner()
      const contract = new ethers.Contract(greeterAddress, Greeter.abi, signer)
      const transaction = await contract.setGreeting(greeting)
      await transaction.wait()
      fetchGreeting()
    }
  }

  async function sendCoins() {
    if (typeof window.ethereum !== 'undefined') {
      await requestAccount()
      const provider = new ethers.providers.Web3Provider(window.ethereum);
      const signer = provider.getSigner();
      const contract = new ethers.Contract(tokenAddress, Token.abi, signer);
      const transation = await contract.transfer(userAccount, amount);
      await transation.wait();
      console.log(`${amount} Coins successfully sent to ${userAccount}`);
    }
  }

  return (
    &lt;div className="App"&gt;
      &lt;header className="App-header"&gt;
        &lt;button onClick={fetchGreeting}&gt;Fetch Greeting&lt;/button&gt;
        &lt;button onClick={setGreeting}&gt;Set Greeting&lt;/button&gt;
        &lt;input onChange={e =&gt; setGreetingValue(e.target.value)} placeholder="Set greeting" /&gt;

        &lt;br /&gt;
        &lt;button onClick={getBalance}&gt;Get Balance&lt;/button&gt;
        &lt;button onClick={sendCoins}&gt;Send Coins&lt;/button&gt;
        &lt;input onChange={e =&gt; setUserAccount(e.target.value)} placeholder="Account ID" /&gt;
        &lt;input onChange={e =&gt; setAmount(e.target.value)} placeholder="Amount" /&gt;
      &lt;/header&gt;
    &lt;/div&gt;
  );
}

export default App;
</code></pre><p>Quindi, esegui l'app:</p><pre><code class="language-sh">npm start
</code></pre><p>Dovremmo essere in grado di fare clic su <strong><strong>Get Balance</strong></strong> e vedere che abbiamo 1.000.000 di monete nel nostro account stampato sulla console.</p><p>Dovresti anche essere in grado di visualizzarli in MetaMask facendo clic su <strong><strong>Add Token</strong></strong>:</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0t2ip26i5d2ltjc9j2a6.jpg" class="kg-image" alt="Aggiungi token" width="1500" height="1246" loading="lazy"></figure><p>Quindi fai clic su <strong><strong>Custom Token</strong></strong> e inserisci l'indirizzo del contratto del token e poi <strong><strong>Add Token</strong></strong> . Ora i token dovrebbero essere disponibili nel tuo portafoglio:</p><figure class="kg-card kg-image-card"><img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5op32iqbeszizri72qc0.jpg" class="kg-image" alt="NDT" width="1500" height="1246" loading="lazy"></figure><p>Quindi, proviamo a inviare quelle monete a un altro indirizzo.</p><p>Per fare ciò, copia l'indirizzo di un altro account e invialo a quell'indirizzo utilizzando l'interfaccia utente di React aggiornata. Quando controlli l'importo del token, dovrebbe essere uguale all'importo originale meno l'importo che hai inviato all'indirizzo.</p><h2 id="come-costruire-un-token-erc20"><strong><strong>Come costruire un token ERC20</strong></strong></h2><p>Lo <a href="https://ethereum.org/en/developers/docs/standards/tokens/erc-20/">standard dei token ERC20</a> definisce un insieme di regole che si applicano a tutti i token ERC20 che consentono loro di interagire facilmente tra loro. ERC20 rende davvero facile per qualcuno coniare i propri token che avranno interoperabilità con altri sulla blockchain di Ethereum.</p><p>Diamo un'occhiata a come possiamo costruire il nostro token utilizzando lo standard ERC20.</p><p>Innanzitutto, installa la libreria di smart contract <code>ERC20</code> &nbsp;<a href="https://github.com/OpenZeppelin/openzeppelin-contracts">OpenZepplin</a> in cui importeremo il token di base:</p><pre><code class="language-sh">npm install @openzeppelin/contracts
</code></pre><p>Successivamente, creeremo il nostro token estendendo (o ereditando) il contratto <code>ERC20</code>:</p><pre><code class="language-solidity">//SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract NDToken is ERC20 {
    constructor(string memory name, string memory symbol) ERC20(name, symbol) {
        _mint(msg.sender, 100000 * (10 ** 18));
    }
}
</code></pre><p>Il costruttore consente di impostare il nome e il simbolo del token e la funzione <code>_mint</code> consente di coniare i token e di impostare l'importo.</p><p>Per impostazione predefinita, ERC20 imposta il numero di decimali a 18, quindi nella nostra funzione <code>_mint</code> moltiplichiamo 100.000 per 10 alla potenza 18 per coniare un totale di 100.000 gettoni, ciascuno con 18 cifre decimali (in modo simile a come 1 Eth è composto da 10 a 18 <a href="https://www.investopedia.com/terms/w/wei.asp">wei</a> .</p><p>Per distribuire, dobbiamo passare i valori del costruttore (<code>name</code> e <code>symbol</code>), quindi potremmo fare qualcosa del genere nel nostro script di distribuzione:</p><pre><code class="language-javascript">const NDToken = await hre.ethers.getContractFactory("NDToken");
const ndToken = await NDToken.deploy("Nader Dabit Token", "NDT");
</code></pre><p>Estendendo il token ERC20 originale, il tuo token erediterà tutte le seguenti funzioni e funzionalità:</p><pre><code class="language-solidity">function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
</code></pre><p>Una volta implementato, puoi utilizzare una qualsiasi di queste funzioni per interagire con il nuovo contratto intelligente. Per un altro esempio di token ERC20, dai un'occhiata a Solidity by example qui: <a href="https://solidity-by-example.org/app/erc20/">https://solidity-by-example.org/app/erc20/</a> .</p><h2 id="conclusione"><strong><strong>Conclusione</strong></strong></h2><p>Ok, abbiamo trattato molto in questo articolo. Ma per me questo è una specie di pane quotidiano / essenziale per iniziare con questo stack.</p><p>È un po' quello che volevo avere, non solo come qualcuno che sta imparando tutte queste cose, ma anche in futuro, se mai avessi bisogno di fare riferimento a qualcosa di cui potrei aver bisogno. Spero che tu abbia imparato molto.</p><p>Se desideri supportare più portafogli oltre a MetaMask, dai un'occhiata a <a href="https://github.com/Web3Modal/web3modal">Web3Modal</a> che semplifica l'implementazione del supporto per più provider nella tua app con una configurazione abbastanza semplice e personalizzabile.</p><p>Nei miei futuri tutorial e guide, mi immergerò nello sviluppo di contratti intelligenti più complessi e anche su come distribuirli come <a href="https://thegraph.com/docs/define-a-subgraph">sottografi</a> per esporre un'API GraphQL su di essi e implementare cose come l'impaginazione e la ricerca full-text.</p><p>Tratterò anche di come utilizzare tecnologie come IPFS e database Web3 per archiviare i dati in modo decentralizzato.</p><p>Se hai domande o suggerimenti per futuri tutorial, fammi sapere.<br></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Come entrare in Ethereum, Crypto e Web3 come sviluppatore ]]>
                </title>
                <description>
                    <![CDATA[ Ultimamente, ho parlato [https://twitter.com/dabit3/status/1391171104757125122]  del mio passaggio [https://twitter.com/dabit3/status/1379157277660299264] allo  spazio Web3 [https://ethereum.org/en/developers/docs/web2-vs-web3/] , Ethereum e crypto, cioè da quando sono passato da una conoscenza tradizionale del Web, mobile e cloud. Da quando ho fatto ciò, un numero impressionante di persone mi ha contattato e anche loro stanno pensando ]]>
                </description>
                <link>https://www.freecodecamp.org/italian/news/come-entrare-in-ethereum-crypto-e-web3-come-sviluppatore/</link>
                <guid isPermaLink="false">621a3958b6d6770504318e36</guid>
                
                    <category>
                        <![CDATA[ blokchain ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web3 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Angelo Mirabelli ]]>
                </dc:creator>
                <pubDate>Wed, 02 Mar 2022 09:48:41 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/italian/news/content/images/2022/02/break-into-blockchain-article.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Articolo originale:</strong> <a href="https://www.freecodecamp.org/news/breaking-into-ethereum-crypto-web3-as-a-developer/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Break into Ethereum, Crypto, and Web3 as a Developer</a>
      </p><p>Ultimamente, ho <a href="https://twitter.com/dabit3/status/1391171104757125122">parlato</a> del <a href="https://twitter.com/dabit3/status/1379157277660299264">mio passaggio</a> allo <a href="https://ethereum.org/en/developers/docs/web2-vs-web3/">spazio Web3</a> , Ethereum e crypto, cioè da quando sono passato da una conoscenza tradizionale del Web, mobile e cloud.</p><p>Da quando ho fatto ciò, un numero impressionante di persone mi ha contattato e anche loro stanno pensando di fare lo stesso.</p><p>È davvero fantastico vedere così tante altre persone interessate a questi campi. E se devo essere onesto, è confortante sapere che anche così tanti altri sono in osservazione e sono anche così profondamente interessati al questo contesto.</p><p>Quanto a me, ero nervoso all'idea di cambiare carriera. Il passaggio a un'area di specializzazione completamente nuova, con una tecnologia su cui mi stavo ancora potenziando e una comunità in cui non ero ancora coinvolto, è stato un grande salto. Soprattutto rispetto a un lavoro molto comodo in un'azienda FAANG, con un'ottimo stipendio (e una squadra che ho davvero amato).</p><p>Dopo oltre un mese, non ho rimpianti per il cambiamento. Sono anche più felice e sono eccitato e pieno di energia per le cose su cui ho l'opportunità di lavorare ogni giorno.</p><p>Ho deciso di scrivere questo post per fornire indicazioni a chiunque cerchi di entrare in blockchain, criptovalute, Ethereum e Web3 da un background di sviluppo tradizionale. Posso indirizzare le persone a questo mio post sul blog la prossima volta che mi verrà chiesto su come entrare in questo ambito.</p><h3 id="divider-questo-articolo-in-alcune-parti-principali-"><strong>Dividerò<strong> questo articolo in alcune parti principali:</strong></strong></h3><ol><li>Tecnologie e risorse per imparare</li><li>Compromessi e considerazioni</li><li>Persone da seguire</li><li>Aziende che assumono e fanno cose interessanti</li><li>Suggerimenti generali e ottenimento di un lavoro</li></ol><p>Iniziamo.</p><h2 id="tecnologie-e-risorse-per-conoscere-ethereum-e-blockchain"><strong><strong>Tecnologie e risorse per conoscere Ethereum e Blockchain</strong></strong></h2><p>Quello che mi interessa di più è di solito cercare di prevedere dove la tecnologia andrà nel prossimo futuro e dove vedo l'attuale slancio. Quindi è su questo che mi concentrerò qui (ed è quello che sto facendo personalmente).</p><p>Per me, le parti più interessanti di questo spazio sono la decentralizzazione, <a href="https://blog.coinbase.com/a-beginners-guide-to-decentralized-finance-defi-574c68ff43c4">la DeFi</a> , la <a href="https://docs.ethhub.io/ethereum-basics/governance/">governance</a> / <a href="https://www.investopedia.com/tech/what-dao/">DAO</a> e <a href="https://www.youtube.com/watch?v=j2rXJLW_93o">l'infrastruttura web decentralizzata</a> .</p><p>Per questo motivo, mi sto concentrando sia sullo sviluppo di Ethereum che su Solidity. Con il linguaggio di programmazione Solidity, puoi programmare contratti intelligenti per Ethereum e per molti altri <a href="https://chainid.network/">blockchain compatibili con EVM</a> .</p><p><a href="https://everest.link/">Al momento della stesura di questo articolo, Ethereum ha anche la potente e importante combinazione di slancio, condivisione mentale degli sviluppatori e dapp</a> di produzione esistenti .</p><p>Anche Ethereum sta attualmente passando a un nuovo meccanismo di consenso, <a href="https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/">proof of stake</a> . Questo risolve le preoccupazioni ambientali che avevo su come funziona la criptovaluta a livello centrale.</p><p>Dopo aver appreso le basi di come funziona il tutto, ti incoraggio a controllare altri blockchain e progetti al di fuori di Ethereum ed EVM.</p><p>Questo ti darà una migliore comprensione del settore nel suo insieme. Ti aiuterà anche a vedere se ci sono altri progetti che ti attraggono o che ritieni siano approcci migliori per raggiungere l'obiettivo che è Web3.</p><p>Considera di esaminare <a href="https://solana.com/">Solana</a> , <a href="https://polkadot.network/">Polkadot</a> , <a href="https://near.org/">Near</a> , <a href="https://www.avax.network/">Avalanche</a> o <a href="https://cosmos.network/">Cosmos</a> .</p><p>Per iniziare ad imparare lo sviluppo della blockchain con Ethereum e Solidity, ti suggerisco di fare quanto segue:</p><h3 id="1-leggi-la-documentazione-di-ethereum"><strong><strong>1. Leggi </strong>la<strong> document</strong>azione<strong> di Ethereum</strong></strong></h3><p>Esplora la <a href="https://ethereum.org/it/developers/docs/">documentazione di Ethereum</a>. Assicurati di controllare la sezione <a href="https://ethereum.org/it/developers/docs/intro-to-ethereum/">Introduzione a Ethereum</a> e qualsiasi altra cosa che attiri la tua attenzione.</p><p>Assicurati anche di dare un'occhiata alla <a href="https://ethereum.org/it/dapps/">vetrina di dapp</a> per avere una buona comprensione delle app di successo create e utilizzate nell'attuale ecosistema.</p><h3 id="2-leggi-la-documentazione-di-solidity"><strong><strong>2. Leggi la documentazione di Solidity</strong></strong></h3><p>La documentazione di <a href="https://docs.soliditylang.org/en/v0.8.4/">Solidity</a> è un ottimo punto di partenza, in particolare la <a href="https://docs.soliditylang.org/en/v0.8.4/solidity-by-example.html">Solidity tramite esempio</a> . Questo ti offre alcuni esempi di contratti intelligenti popolari come il voto, un'asta, l'acquisto a distanza e i micropagamenti.</p><p>Puoi copiare e incollare questi contratti <a href="https://remix.ethereum.org/">nell'IDE Remix</a> per iniziare a eseguirli e modificarli per vedere come funzionano.</p><p>Ho anche fatto un video sulla procedura dettagliata del contratto di voto <a href="https://www.youtube.com/watch?v=GB3hiiNNDjk">qui</a> .</p><h3 id="3-mettiti-comodo-con-remix-ide"><strong><strong>3. Mettiti comodo con Remix IDE</strong></strong></h3><p>È davvero facile giocare e iniziare a creare contratti intelligenti senza dover configurare alcun tipo di ambiente di sviluppo utilizzando <a href="https://remix.ethereum.org/">Remix IDE</a> . Fa parte del <a href="https://remix-project.org/">Remix Project</a> , finanziato dalla <a href="https://ethereum.foundation/">Ethereum Foundation</a> .</p><p>Questo Remix IDE ti consente di creare, modificare ed eseguire contratti intelligenti direttamente dal tuo browser. Offre un ambiente perfetto per imparare come funziona Solidity. È anche ottimo per creare vari tipi di contratti intelligenti e giocarci mentre impari sia Solidity che come interagire con Ethereum</p><h3 id="4-prova-a-creare-un-dapp-full-stack"><strong><strong>4. Prova a creare un dapp </strong>full stack</strong></h3><p>Oltre a Solidity, le altre parti dello stack di sviluppo includono un ambiente Ethereum locale come <a href="https://hardhat.org/">Hardhat</a> o <a href="https://www.trufflesuite.com/">Truffle</a> , un portafoglio come <a href="https://metamask.io/">Metamask</a> , nonché una libreria lato client che ti consente di interagire con la blockchain, come <a href="https://docs.ethers.io/">Ethers.js</a> o <a href="https://web3js.readthedocs.io/">Web3.js</a> .</p><p>Per capire come tutto questo si adatta insieme, è utile creare da zero un dapp full stack su questo complesso di elementi. Puoi impostare il progetto front-end e l'ambiente di sviluppo locale e distribuire, eseguire e interagire con uno smart contract sulla blockchain.</p><p>Ecco due corsi introduttivi per iniziare con questo:</p><ol><li><a href="https://www.youtube.com/watch?v=xWFba_9QYmc">Tutorial di programmazione Ethereum - DeFi, Solidity, Truffle, Web3.js</a></li><li><a href="https://www.youtube.com/watch?v=a0osIaAOFSE">La guida completa allo sviluppo di Full Stack Ethereum</a> ( <a href="https://www.freecodecamp.org/news/full-stack-ethereum-development/">ed eccola anche sotto forma di articolo</a> )</li></ol><h3 id="5-considera-la-lettura-di-questi-libri"><strong><strong>5. Considera la lettura di questi libri</strong></strong></h3><p>Lo spazio stesso si muove molto rapidamente, quindi i libri tecnici spesso diventano obsoleti altrettanto rapidamente. I fondamenti di ciò che è Web3, tuttavia, non sono cambiati molto.</p><p>Ci sono alcuni libri davvero fantastici che mi hanno aiutato non solo a cogliere lo stato attuale di ogni cosa, ma che mi hanno anche aiutato ad aprire gli occhi sulle possibilità e opportunità future che si trovano al suo interno.</p><h4 id="token-economy-come-il-web3-reinventa-internet"><strong><strong>Token Economy - Come il Web3 reinventa Internet</strong></strong></h4><p>Se hai intenzione di leggere solo uno di questi libri, questo è quello che direi che è il più importante. È un'immersione magistrale in tutte le carenze del web come lo conosciamo, cosa vuole essere il Web3, come influenzerà le varie parti della nostra vita attuale e cosa deve accadere affinché questa visione si realizzi .</p><p>Puoi visualizzare il libro <a href="https://shermin.net/token-economy-book/">qui</a> .</p><h4 id="the-infinite-machine-come-un-esercito-di-cripto-hacker-sta-costruendo-la-prossima-internet-con-ethereum"><strong><strong>The Infinite Machine - Come un esercito di cripto-hacker sta costruendo la prossima Internet con Ethereum</strong></strong></h4><p>Questa è la straordinaria storia di come è nato Ethereum, guidandoti attraverso la storia di tutto questo. È un resoconto molto approfondito e divertente della storia delle origini di Ethereum, consiglio vivamente di provarlo.</p><p>Puoi visualizzare il libro <a href="https://www.harpercollins.com/products/the-infinite-machine-camila-russo?variant=32123333836834">qui</a> .</p><h4 id="new-village-ritorno-al-potere-delle-persone"><strong>New Village<strong> - Ritorno al potere delle persone</strong></strong></h4><p>Questa è una storia davvero interessante su come le tecnologie blockchain e il decentramento influenzeranno il futuro del mondo.</p><p>Puoi visualizzare il libro <a href="https://www.amazon.com/New-Village-Power-Back-People-Blockchain/dp/1718045743">qui</a></p><h4 id="how-to-defi"><strong>How to DeFi</strong></h4><p>Come probabilmente puoi intuire dal titolo, questo libro si concentra su come puoi iniziare a utilizzare la DeFi oggi. Ti dà una buona comprensione di come puoi usarla oggi e di alcune sue applicazioni che vedremo in futuro.</p><p>Puoi visualizzare il libro <a href="https://landing.coingecko.com/how-to-defi/">qui</a></p><h4 id="the-spatial-web"><strong>The Spatial Web</strong></h4><p>The Spatial Web è un libro che esplora il futuro del web e tutte le implicazioni, non solo del Web3 e del decentramento, ma come tutto si unirà per consentire cose che potremmo non aver ancora considerato.</p><p>Fa un buon lavoro soppesando gli aspetti positivi e negativi, nonché i modi in cui potremmo essere in grado di affrontare eventuali esiti negativi di ciò che verrà.</p><p>Puoi visualizzare il libro <a href="https://www.goodreads.com/book/show/52816204-the-spatial-web">qui</a></p><p>Ed ecco un paio di libri su solidity:</p><ul><li><a href="https://www.oreilly.com/library/view/hands-on-smart-contract/9781492045250/">Sviluppo pratico di contratti intelligenti con Solidity ed Ethereum</a></li><li><a href="https://www.oreilly.com/library/view/mastering-ethereum/9781491971932/">Padroneggiare Ethereum</a></li></ul><h3 id="6-ascolta-questi-podcast"><strong><strong>6. Ascolta questi podcast</strong></strong></h3><p>Ecco alcuni buoni podcast:</p><ul><li><a href="https://outlierventures.io/podcasts/">Fondatori di Web 3</a> – Le persone che stanno creando e costruendo la prossima fase di Internet.</li><li><a href="http://podcast.banklesshq.com/">Bankless</a> : la guida definitiva alla criptofinanza</li><li><a href="https://podcast.ethhub.io/">Into the Ether</a> – Podcast su Ethereum</li><li><a href="https://player.fm/series/crypto-101">Cripto 101</a></li><li><a href="https://player.fm/series/epicenter-learn-about-crypto-blockchain-ethereum-bitcoin-and-distributed-technologies-41400">Epicenter</a> : scopri le tecnologie Crypto, Blockchain, Ethereum, Bitcoin e distribuite</li></ul><h3 id="7-guarda-questi-canali-youtube"><strong><strong>7. Guarda questi canali YouTube</strong></strong></h3><ul><li><a href="https://www.youtube.com/channel/UCNOfzGXD_C9YMYmnefmPH0g">Fondazione Ethereum</a></li><li><a href="https://www.youtube.com/channel/UCZM8XQjNOyG2ElPpEUtNasA">Eat the Blocks</a> – Brevi video sullo sviluppo della blockchain</li><li><a href="https://www.youtube.com/c/Finematics/videos">Finematics</a> – Condivisione di video DeFi interessanti</li><li><a href="https://www.youtube.com/channel/UCY0xL8V6NzzFcwzHCgB8orQ">Dapp University</a> – Video nello spazio di Ethereum</li><li><a href="https://www.youtube.com/c/BlockGeeks/featured">BlockGeeks</a> – Formazione Blockchain generale</li><li><a href="https://www.youtube.com/channel/UCvCp6vKY5jDr87htKH6hgDA">Il quotidiano Gwei</a></li><li><a href="https://www.youtube.com/channel/UC_HI2i2peo1A-STdG22GFsA">Austin Griffith</a></li></ul><p>Ho anche iniziato a fare video e tutorial su Ethereum e Solidity, quindi considera di dare un'occhiata al <a href="https://www.youtube.com/channel/UC7mca3O0DmdSG2Cr80sOD7g">mio</a> canale YouTube.</p><h2 id="compromessi-e-considerazioni-sul-cambio-di-carriera"><strong><strong>Compromessi e considerazioni sul cambio di carriera</strong></strong></h2><p>Ci sono sempre cose da considerare quando si effettua una transizione di carriera, ma soprattutto quando si considera questo contesto.</p><p>Ci sono molti aspetti positivi, ma ci sono anche incognite come anche aspetti negativi. Parliamo di alcuni di loro.</p><h3 id="-una-tecnologia-nascente"><strong><strong>È una tecnologia nascente</strong></strong></h3><p>Mentre ci sono molte dapp esistenti e aziende già fiorenti, questo spazio sta ancora nascendo in molti modi.</p><p>Ci sono molti problemi che dobbiamo ancora risolvere e non ci sono risposte chiare per molte domande che avrai. I problemi da risolvere sono spesso complessi, a volte combinano uno o più aspetti dei sistemi distribuiti, teoria dei giochi, crittografia, economia, scienze sociali e politiche, identità, psicologia e altro ancora.</p><p>Per questo motivo, ci sono ancora cose che non possiamo finora costruire con le soluzioni esistenti che sono attualmente disponibili.</p><p>Personalmente penso che questa sia una delle cose più eccitanti di tutto ciò, ma non è per tutti.</p><h3 id="-uno-spazio-volatile"><strong><strong>È uno spazio volatile</strong></strong></h3><p>Molti dei progetti sono costruiti attorno a vari tipi di token. Il valore di molti di questi gettoni aumenta e diminuisce drasticamente e spesso si vede che le persone guadagnano e perdono interesse all'argomento in base a queste oscillazioni.</p><p>Se non hai fondamentalmente accettato le idee alla base del decentramento stesso, potresti trovare questi alti e bassi mentalmente faticosi.</p><h3 id="-pieno-di-speculazione"><strong><strong>È pieno di speculazion</strong>e</strong></h3><p>Poiché molta gente acquista determinati token unicamente a scopo speculativo, ciò attira alcune persone solo per i soldi.</p><p>Vedi cose come truffatori che cercano di avere la meglio sulle persone e rubare i loro soldi, discorsi interminabili sulle oscillazioni dei prezzi da parte di persone che speculano e veri e propri progetti truffa che spesso screditano l'industria nel suo insieme.</p><p>Questa è una parte fastidiosa e non penso che se terminerà presto.</p><h3 id="questa-discussione"><strong><strong>Quest</strong>a<strong> </strong>discussione</strong></h3><p>Vorrei anche che tu dia un'occhiata a <a href="https://twitter.com/jonsyu/status/1389635626698297344">questa discussione su Twitter</a>. Anche se non ho sperimentato tutte queste cose, sta sicuramente chiarendo alcune delle cose che ho visto.</p><h2 id="suggerimenti-generali-e-come-ottenere-un-lavoro-blockchain-o-relativo-alle-criptovalute"><strong><strong>Suggerimenti generali e come ottenere un lavoro Blockchain o relativo alle criptovalute</strong></strong></h2><p>Ci sono molte aree all'interno dello spazio su cui puoi concentrarti e magari poi fornire un impatto positivo su una squadra. Esaminerei le diverse aree come governance, DeFi, NFT e protocolli web decentralizzati per vedere cosa ti interessa di più e poi concentrarti su quello.</p><p>Ci sono molte opportunità e molti modi per distinguersi e farsi notare. Se trovi un progetto interessante e vorresti essere coinvolto, entra subito nella loro comunità ed ecosistema e inizia ad imparare. Quindi vedi dove potresti essere in grado di dare una mano. Unisciti a Discord o guarda i loro problemi su GitHub per trovare modi in cui puoi contribuire.</p><p>Questo ti darà l'opportunità di incontrare persone coinvolte nel progetto e aprirà discussioni per ottenere potenzialmente un ruolo con loro. In effetti, è molto comune che le persone all'interno dei team prendano nota dei partecipanti più attivi della comunità, quindi spesso ti contattano e cercheranno di reclutarti senza nemmeno candidarti.</p><p>La paga è generalmente <a href="https://cryptocurrencyjobs.co/salaries/solidity-developer/">buona</a>. A seconda da dove vieni, potrebbe essere maggiore o minore, ma probabilmente non sarà ai livelli elevati di quello che vedi nelle aziende FAANG.</p><p>Probabilmente c'è più potenziale di rialzo. La maggior parte delle aziende offre una combinazione di retribuzione base + equità sotto forma di token digitale, quindi se rimani e puoi contribuire a rendere il progetto di successo e il valore del token aumenta, spesso puoi guadagnare di più di quanto faresti in molti altre aree.</p><h2 id="persone-da-seguire-su-twitter"><strong><strong>Persone da seguire su Twitter</strong></strong></h2><p>Ecco alcune persone che potresti considerare di seguire su Twitter:</p><p><a href="https://twitter.com/VitalikButerin">Vitalik</a><br><a href="https://twitter.com/ashleighschap">Ashleigh Schapp</a><br><a href="https://twitter.com/CryptoHayes">Arthur Hayes</a><br><a href="https://twitter.com/StaniKulechov">Stani Kulechov</a><br><a href="https://twitter.com/gkimbwala">Gloria Kimbwala</a><br><a href="https://twitter.com/niran">Niran Babalola</a><br><a href="https://twitter.com/ricburton">Ric Burton</a><br><a href="https://twitter.com/dennisonbertram">Dennison Bertram</a><br><a href="https://twitter.com/manasilvora">Mana Silvora</a><br><a href="https://twitter.com/austingriffith">Austin Griffith</a><br><a href="https://twitter.com/smpalladino">Santiago Palladino</a><br><a href="https://twitter.com/zmanian">Zaki Manian</a><br><a href="https://twitter.com/sassal0x">Anthony Sassano</a></p><p>Ho anche trovato <a href="https://twitter.com/i/lists/869994563691319296/members">questo elenco completo</a> creato da qualcuno su Twitter.</p><p>Alcune persone nel mio team di <a href="https://twitter.com/edgeandnode">Edge &amp; Node</a> :<br><a href="https://twitter.com/yanivgraph">Yaniv Tal</a><br><a href="https://twitter.com/theklineventure">Tegan Kline</a><br><a href="https://twitter.com/evabeylin">Eva Beylin</a><br><a href="https://twitter.com/azacharyf">Adam Fuller</a><br><a href="https://twitter.com/RezBrandon">Brandon Ramirez</a></p><h2 id="squadre-che-fanno-cose-interessanti-e-assunzioni-"><strong><strong>Squadre che fanno cose interessanti (e assunzioni)</strong></strong></h2><p><a href="https://compound.finance/about#jobs">Compound</a><br><a href="https://jobs.lever.co/Uniswap">Uniswap</a><br><a href="https://chainlinklabs.com/careers">Chainlink</a><br><a href="https://jobs.lever.co/SkynetLabs">Skynet Labs</a><br><a href="https://aave.com/careers/">Aave</a><br><a href="https://matic.network/careers/">Matic</a><br><a href="https://livepeer.org/jobs">Livepeer</a><br><a href="https://consensys.net/open-roles/">Consensys</a><br><a href="https://medium.com/the-ethereum-name-service/ens-is-hiring-come-build-a-new-decentralized-internet-with-us-24398dea3ac">ENS</a><br><a href="https://openzeppelin.com/jobs/">OpenZeppelin</a><br><a href="https://foundation.app/careers">Foundation</a><br><a href="https://cryptocurrencyjobs.co/startups/zora/">Zora</a><br><a href="https://synthetix.com/careers">Synthetix</a><br><a href="https://jobs.dcg.co/companies">Digital Currency Group</a></p><p>Puoi anche trovare un elenco abbastanza decente di opportunità di lavoro in criptovaluta <a href="https://cryptocurrencyjobs.co/">qui</a> .</p><p>Inoltre, il mio team di <a href="https://edgeandnode.com/jobs">Edge &amp; Node sta assumendo</a> !</p><h2 id="conclusione"><strong><strong>Conclusione</strong></strong></h2><p>Ho già detto che questo spazio è volatile? Preparati per alcuni alti e bassi, ma anche per alcuni dei momenti più divertenti che potresti avere nella tua carriera.</p><p>Lavorerai al fianco di alcune delle persone più intelligenti nell'ambito della tecnologia cercando di risolvere alcuni dei problemi più complessi che penso che alla fine avranno un enorme impatto positivo sull'umanità.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
