Contratto intelligente Hello World per principianti
Se sei nuovo nello sviluppo su blockchain e non sai da dove iniziare, o se vuoi semplicemente capire come distribuire e interagire con i contratti intelligenti, questa guida fa per te. Ti guideremo attraverso la creazione e la distribuzione di un semplice contratto intelligente sulla rete di test Sepolia utilizzando un portafoglio virtuale MetaMask (opens in a new tab), Solidity (opens in a new tab), Hardhat (opens in a new tab) e Alchemy (opens in a new tab) (non preoccuparti se non capisci ancora cosa significhi tutto questo, lo spiegheremo).
Nella parte 2 (opens in a new tab) di questo tutorial vedremo come interagire con il nostro contratto intelligente una volta distribuito qui, e nella parte 3 (opens in a new tab) spiegheremo come pubblicarlo su Etherscan.
Se hai domande in qualsiasi momento, sentiti libero di contattarci nel Discord di Alchemy (opens in a new tab)!
Passaggio 1: Connettiti alla rete Ethereum
Ci sono molti modi per fare richieste alla catena di Ethereum. Per semplicità, useremo un account gratuito su Alchemy, una piattaforma per sviluppatori blockchain e API che ci consente di comunicare con la catena di Ethereum senza dover eseguire i nostri nodi. La piattaforma dispone anche di strumenti per sviluppatori per il monitoraggio e l'analisi che sfrutteremo in questo tutorial per capire cosa succede dietro le quinte nella distribuzione del nostro contratto intelligente. Se non hai già un account Alchemy, puoi registrarti gratuitamente qui (opens in a new tab).
Passaggio 2: Crea la tua app (e la chiave API)
Una volta creato un account Alchemy, puoi generare una chiave API creando un'app. Questo ci consentirà di fare richieste alla rete di test Sepolia. Se non hai familiarità con le reti di test, dai un'occhiata a questa pagina.
- Naviga alla pagina "Create new app" (Crea nuova app) nella tua Dashboard di Alchemy selezionando "Select an app" (Seleziona un'app) nella barra di navigazione e cliccando su "Create new app"
- Dai un nome alla tua app "Hello World", offri una breve descrizione e scegli un caso d'uso, ad es. "Infra & Tooling". Successivamente, cerca "Ethereum" e seleziona la rete.
- Clicca su "Next" (Avanti) per procedere, poi su "Create app" (Crea app) e il gioco è fatto! La tua app dovrebbe apparire nel menu a discesa della barra di navigazione, con una chiave API disponibile per essere copiata.
Passaggio 3: Crea un account Ethereum (indirizzo)
Abbiamo bisogno di un account Ethereum per inviare e ricevere transazioni. Per questo tutorial, useremo MetaMask, un portafoglio virtuale nel browser utilizzato per gestire l'indirizzo del tuo account Ethereum. Maggiori informazioni sulle transazioni.
Puoi scaricare MetaMask e creare un account Ethereum gratuitamente qui (opens in a new tab). Quando crei un account, o se ne hai già uno, assicurati di passare alla rete di test "Sepolia" utilizzando il menu a discesa della rete (in modo da non avere a che fare con denaro reale).
Se non vedi Sepolia nell'elenco, vai nel menu, poi su Advanced (Avanzate) e scorri verso il basso per attivare "Show test networks" (Mostra reti di test). Nel menu di selezione della rete, scegli la scheda "Custom" (Personalizzata) per trovare un elenco di reti di test e seleziona "Sepolia".
Passaggio 4: Aggiungi ether da un rubinetto
Per distribuire il nostro contratto intelligente sulla rete di test, avremo bisogno di alcuni finti ETH. Per ottenere ETH di Sepolia puoi andare ai dettagli della rete Sepolia per visualizzare un elenco di vari rubinetti. Se uno non funziona, provane un altro poiché a volte possono esaurirsi. Potrebbe volerci del tempo per ricevere i tuoi finti ETH a causa del traffico di rete. Dovresti vedere gli ETH nel tuo account MetaMask subito dopo!
Passaggio 5: Controlla il tuo saldo
Per verificare che il nostro saldo sia presente, facciamo una richiesta eth_getBalance utilizzando lo strumento composer di Alchemy (opens in a new tab). Questo restituirà la quantità di ETH nel nostro portafoglio. Dopo aver inserito l'indirizzo del tuo account MetaMask e cliccato su "Send Request" (Invia richiesta), dovresti vedere una risposta come questa:
1{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }NOTA: Questo risultato è in wei, non in ETH. Il wei è utilizzato come la più piccola denominazione di ether. La conversione da wei a ETH è: 1 eth = 1018 wei. Quindi, se convertiamo 0x2B5E3AF16B1880000 in decimale otteniamo 5*10¹⁸ che equivale a 5 ETH.
Fiuu! I nostri soldi finti ci sono tutti .
Passaggio 6: Inizializza il nostro progetto
Per prima cosa, dovremo creare una cartella per il nostro progetto. Naviga nella tua riga di comando e digita:
1mkdir hello-world2cd hello-worldOra che siamo all'interno della cartella del nostro progetto, useremo npm init per inizializzare il progetto. Se non hai già installato npm, segui queste istruzioni (opens in a new tab) (avremo bisogno anche di Node.js, quindi scarica anche quello!).
1npm initNon importa molto come rispondi alle domande di installazione, ecco come abbiamo fatto noi come riferimento:
1package name: (hello-world)2version: (1.0.0)3description: hello world smart contract4entry point: (index.js)5test command:6git repository:7keywords:8author:9license: (ISC)10About to write to /Users/.../.../.../hello-world/package.json:11
12{13 "name": "hello-world",14 "version": "1.0.0",15 "description": "hello world smart contract",16 "main": "index.js",17 "scripts": {18 "test": "echo \\"Error: no test specified\\" && exit 1"19 },20 "author": "",21 "license": "ISC"22}Approva il package.json e siamo pronti a partire!
Passaggio 7: Scarica Hardhat (opens in a new tab)
Hardhat è un ambiente di sviluppo per compilare, distribuire, testare ed eseguire il debug del tuo software Ethereum. Aiuta gli sviluppatori nella creazione di contratti intelligenti e dApp localmente prima della distribuzione sulla catena live.
All'interno del nostro progetto hello-world esegui:
1npm install --save-dev hardhatDai un'occhiata a questa pagina per maggiori dettagli sulle istruzioni di installazione (opens in a new tab).
Passaggio 8: Crea il progetto Hardhat
All'interno della cartella del nostro progetto esegui:
1npx hardhatDovresti quindi vedere un messaggio di benvenuto e l'opzione per selezionare cosa vuoi fare. Seleziona "create an empty hardhat.config.js":
1888 888 888 888 8882888 888 888 888 8883888 888 888 888 88848888888888 8888b. 888d888 .d88888 88888b. 8888b. 8888885888 888 "88b 888P" d88" 888 888 "88b "88b 8886888 888 .d888888 888 888 888 888 888 .d888888 8887888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y8889
10👷 Welcome to Hardhat v2.0.11 👷?11
12What do you want to do? …13Create a sample project14❯ Create an empty hardhat.config.js15QuitQuesto genererà un file hardhat.config.js per noi, che è dove specificheremo tutta la configurazione per il nostro progetto (nel passaggio 13).
Passaggio 9: Aggiungi le cartelle del progetto
Per mantenere organizzato il nostro progetto creeremo due nuove cartelle. Naviga nella directory principale del tuo progetto nella riga di comando e digita:
1mkdir contracts2mkdir scriptscontracts/è dove conserveremo il file di codice del nostro contratto intelligente hello worldscripts/è dove conserveremo gli script per distribuire e interagire con il nostro contratto
Passaggio 10: Scrivi il nostro contratto
Ti starai chiedendo, quando diavolo scriveremo il codice?? Bene, eccoci qui, al passaggio 10.
Apri il progetto hello-world nel tuo editor preferito (a noi piace VSCode (opens in a new tab)). I contratti intelligenti sono scritti in un linguaggio chiamato Solidity, che è quello che useremo per scrivere il nostro contratto intelligente HelloWorld.sol.
- Naviga nella cartella "contracts" e crea un nuovo file chiamato HelloWorld.sol
- Di seguito è riportato un esempio di contratto intelligente Hello World della Ethereum Foundation che useremo per questo tutorial. Copia e incolla i contenuti sottostanti nel tuo file HelloWorld.sol e assicurati di leggere i commenti per capire cosa fa questo contratto:
1// Specifica la versione di Solidity, utilizzando il versionamento semantico.2// Scopri di più: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma3pragma solidity ^0.7.0;4
5// Definisce un contratto chiamato `HelloWorld`.6// Un contratto è una raccolta di funzioni e dati (il suo stato). Una volta distribuito, un contratto risiede a un indirizzo specifico sulla blockchain di Ethereum. Scopri di più: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html7contract HelloWorld {8
9 // Dichiara una variabile di stato `message` di tipo `string`.10 // Le variabili di stato sono variabili i cui valori sono memorizzati in modo permanente nell'archiviazione del contratto. La parola chiave `public` rende le variabili accessibili dall'esterno di un contratto e crea una funzione che altri contratti o client possono chiamare per accedere al valore.11 string public message;12
13 // Similmente a molti linguaggi orientati agli oggetti basati su classi, un costruttore è una funzione speciale che viene eseguita solo alla creazione del contratto.14 // I costruttori sono usati per inizializzare i dati del contratto. Scopri di più:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors15 constructor(string memory initMessage) {16
17 // Accetta un argomento stringa `initMessage` e imposta il valore nella variabile di archiviazione `message` del contratto).18 message = initMessage;19 }20
21 // Una funzione pubblica che accetta un argomento stringa e aggiorna la variabile di archiviazione `message`.22 function update(string memory newMessage) public {23 message = newMessage;24 }25}Questo è un contratto intelligente semplicissimo che memorizza un messaggio al momento della creazione e può essere aggiornato chiamando la funzione update.
Passaggio 11: Connetti MetaMask e Alchemy al tuo progetto
Abbiamo creato un portafoglio MetaMask, un account Alchemy e scritto il nostro contratto intelligente, ora è il momento di connettere i tre.
Ogni transazione inviata dal tuo portafoglio virtuale richiede una firma utilizzando la tua chiave privata univoca. Per fornire al nostro programma questa autorizzazione, possiamo archiviare in modo sicuro la nostra chiave privata (e la chiave API di Alchemy) in un file di ambiente.
Per saperne di più sull'invio di transazioni, dai un'occhiata a questo tutorial sull'invio di transazioni utilizzando web3.
Per prima cosa, installa il pacchetto dotenv nella directory del tuo progetto:
1npm install dotenv --saveQuindi, crea un file .env nella directory principale del nostro progetto e aggiungi la tua chiave privata MetaMask e l'URL dell'API HTTP di Alchemy.
- Segui queste istruzioni (opens in a new tab) per esportare la tua chiave privata
- Vedi sotto per ottenere l'URL dell'API HTTP di Alchemy
Copia l'URL dell'API di Alchemy
Il tuo .env dovrebbe apparire così:
1API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"2PRIVATE_KEY = "your-metamask-private-key"Per connetterli effettivamente al nostro codice, faremo riferimento a queste variabili nel nostro file hardhat.config.js nel passaggio 13.
.env! Assicurati di non condividere o esporre mai il tuo file .env a nessuno, poiché così facendo comprometti i tuoi segreti. Se stai utilizzando il controllo di versione, aggiungi il tuo .env a un file gitignore.Passaggio 12: Installa Ethers.js
Ethers.js è una libreria che semplifica l'interazione e l'esecuzione di richieste a Ethereum avvolgendo i metodi JSON-RPC standard con metodi più intuitivi.
Hardhat rende facilissimo integrare i Plugin (opens in a new tab) per strumenti aggiuntivi e funzionalità estese. Sfrutteremo il plugin Ethers (opens in a new tab) per la distribuzione dei contratti (Ethers.js (opens in a new tab) ha alcuni metodi di distribuzione dei contratti estremamente puliti).
Nella directory del tuo progetto digita:
1npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"Richiederemo anche ethers nel nostro hardhat.config.js nel passaggio successivo.
Passaggio 13: Aggiorna hardhat.config.js
Finora abbiamo aggiunto diverse dipendenze e plugin, ora dobbiamo aggiornare hardhat.config.js in modo che il nostro progetto li conosca tutti.
Aggiorna il tuo hardhat.config.js in modo che appaia così:
1require('dotenv').config();2
3require("@nomiclabs/hardhat-ethers");4const { API_URL, PRIVATE_KEY } = process.env;5
6/**7* @type import('hardhat/config').HardhatUserConfig8*/9module.exports = {10 solidity: "0.7.3",11 defaultNetwork: "sepolia",12 networks: {13 hardhat: {},14 sepolia: {15 url: API_URL,16 accounts: [`0x${PRIVATE_KEY}`]17 }18 },19}Passaggio 14: Compila il nostro contratto
Per assicurarci che tutto funzioni finora, compiliamo il nostro contratto. L'attività compile è una delle attività integrate di hardhat.
Dalla riga di comando esegui:
1npx hardhat compilePotresti ricevere un avviso su SPDX license identifier not provided in source file, ma non c'è bisogno di preoccuparsi: si spera che tutto il resto vada bene! In caso contrario, puoi sempre inviare un messaggio nel Discord di Alchemy (opens in a new tab).
Passaggio 15: Scrivi il nostro script di distribuzione
Ora che il nostro contratto è scritto e il nostro file di configurazione è pronto, è il momento di scrivere il nostro script di distribuzione del contratto.
Naviga nella cartella scripts/ e crea un nuovo file chiamato deploy.js, aggiungendovi i seguenti contenuti:
1async function main() {2 const HelloWorld = await ethers.getContractFactory("HelloWorld");3
4 // Start deployment, returning a promise that resolves to a contract object5 const hello_world = await HelloWorld.deploy("Hello World!");6 console.log("Contract deployed to address:", hello_world.address);}7
8main()9 .then(() => process.exit(0))10 .catch(error => {11 console.error(error);12 process.exit(1);13 });Hardhat fa un lavoro straordinario nello spiegare cosa fa ciascuna di queste righe di codice nel loro tutorial sui Contratti (opens in a new tab), abbiamo adottato le loro spiegazioni qui.
1const HelloWorld = await ethers.getContractFactory("HelloWorld");Una ContractFactory in ethers.js è un'astrazione utilizzata per distribuire nuovi contratti intelligenti, quindi HelloWorld qui è una fabbrica per le istanze del nostro contratto hello world. Quando si utilizza il plugin hardhat-ethers, le istanze ContractFactory e Contract sono connesse al primo firmatario per impostazione predefinita.
1const hello_world = await HelloWorld.deploy();Chiamare deploy() su una ContractFactory avvierà la distribuzione e restituirà una Promise che si risolve in un Contract. Questo è l'oggetto che ha un metodo per ciascuna delle funzioni del nostro contratto intelligente.
Passaggio 16: Distribuisci il nostro contratto
Siamo finalmente pronti per distribuire il nostro contratto intelligente! Naviga nella riga di comando ed esegui:
1npx hardhat run scripts/deploy.js --network sepoliaDovresti quindi vedere qualcosa del genere:
1Contract deployed to address: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570Se andiamo su Sepolia etherscan (opens in a new tab) e cerchiamo l'indirizzo del nostro contratto, dovremmo essere in grado di vedere che è stato distribuito con successo. La transazione apparirà più o meno così:
L'indirizzo From dovrebbe corrispondere all'indirizzo del tuo account MetaMask e l'indirizzo To dirà "Contract Creation" (Creazione del contratto), ma se clicchiamo sulla transazione vedremo l'indirizzo del nostro contratto nel campo To:
Congratulazioni! Hai appena distribuito un contratto intelligente sulla catena di Ethereum 🎉
Per capire cosa succede dietro le quinte, navighiamo nella scheda Explorer nella nostra dashboard di Alchemy (opens in a new tab). Se hai più app Alchemy, assicurati di filtrare per app e seleziona "Hello World".

Qui vedrai una manciata di chiamate JSON-RPC che Hardhat/Ethers ha effettuato dietro le quinte per noi quando abbiamo chiamato la funzione .deploy(). Due importanti da segnalare qui sono eth_sendRawTransaction (opens in a new tab), che è la richiesta per scrivere effettivamente il nostro contratto sulla catena Sepolia, e eth_getTransactionByHash (opens in a new tab) che è una richiesta per leggere informazioni sulla nostra transazione dato l'hash (un modello tipico quando si effettuano transazioni). Per saperne di più sull'invio di transazioni, dai un'occhiata a questo tutorial sull'invio di transazioni utilizzando Web3
Questo è tutto per la parte 1 di questo tutorial, nella parte 2 interagiremo effettivamente con il nostro contratto intelligente (opens in a new tab) aggiornando il nostro messaggio iniziale, e nella parte 3 pubblicheremo il nostro contratto intelligente su Etherscan (opens in a new tab) in modo che tutti sappiano come interagire con esso.
Vuoi saperne di più su Alchemy? Dai un'occhiata al nostro sito web (opens in a new tab). Non vuoi mai perderti un aggiornamento? Iscriviti alla nostra newsletter qui (opens in a new tab)! Assicurati anche di unirti al nostro Discord (opens in a new tab).
Ultimo aggiornamento della pagina: 3 marzo 2026





