Introduzione
Il deploy di contratti smart su blockchain è una fase cruciale nello sviluppo di applicazioni decentralizzate. In questo tutorial, esploreremo come utilizzare Truffle, un framework popolare per lo sviluppo di contratti Solidity, per eseguire il deploy dei tuoi contratti su testnet e mainnet. Imparerai a configurare l´ambiente, scrivere i tuoi contratti e gestire il deploy in modo sicuro ed efficace.
Codice completo
Iniziamo creando un semplice contratto Solidity e configurando il nostro progetto Truffle. Assicurati di avere installato Node.js e Truffle. Puoi installare Truffle usando il seguente comando:
npm install -g truffle Successivamente, crea una nuova cartella per il tuo progetto e inizializza Truffle:
mkdir my-dapp
cd my-dapp
truffle init Ora, creiamo un semplice contratto chiamato SimpleStorage.sol nella cartella contracts:
pragma solidity ^0.8.0;
contract SimpleStorage {
uint256 storedData;
function set(uint256 x) public {
storedData = x;
}
function get() public view returns (uint256) {
return storedData;
}
} Spiegazione
Il contratto SimpleStorage consente di memorizzare e recuperare un numero intero. La funzione set imposta il valore, mentre get restituisce il valore memorizzato. Ora che abbiamo il nostro contratto, dobbiamo configurare Truffle per eseguire il deploy su una testnet come Rinkeby o Goerli.
Per farlo, dobbiamo installare alcune dipendenze. Useremo dotenv per gestire le variabili d´ambiente e @truffle/hdwallet-provider per interagire con la blockchain:
npm install dotenv @truffle/hdwallet-provider Crea un file .env nella radice del tuo progetto e aggiungi le seguenti variabili:
MNEMONIC="la tua frase mnemonica qui"
INFURA_URL="https://rinkeby.infura.io/v3/il_tuo_progetto_id" Ora, apriamo il file truffle-config.js e configuriamo la rete per il deploy:
const HDWalletProvider = require(´@truffle/hdwallet-provider´);
require(´dotenv´).config();
const { MNEMONIC, INFURA_URL } = process.env;
module.exports = {
networks: {
rinkeby: {
provider: () => new HDWalletProvider(MNEMONIC, INFURA_URL),
network_id: 4, // Rinkeby´s id
gas: 5500000, // Gas limit
confirmations: 2, // # of confirmations to wait between deployments
timeoutBlocks: 200, // # of blocks before a deployment times out
skipDryRun: true // Skip dry run before migrations? (default: false for public nets)
},
mainnet: {
provider: () => new HDWalletProvider(MNEMONIC, INFURA_URL),
network_id: 1, // Mainnet´s id
gas: 5500000,
confirmations: 2,
timeoutBlocks: 200,
skipDryRun: true
}
},
compilers: {
solc: {
version: "0.8.0" // Versione del compilatore Solidity
}
}
}; Best practice
Quando si esegue il deploy dei contratti, è fondamentale seguire alcune best practice:
- Testare i contratti: Prima di eseguire il deploy sulla mainnet, assicurati di testare i tuoi contratti su una testnet per identificare eventuali bug.
- Limitare il gas: Imposta un limite di gas appropriato per evitare costi eccessivi durante il deploy.
- Utilizzare variabili d´ambiente: Non inserire mai chiavi private o frasi mnemoniche direttamente nel codice. Usa un file .env per gestirle in modo sicuro.
- Monitorare le transazioni: Usa strumenti come Etherscan per monitorare le tue transazioni e assicurarti che siano state eseguite correttamente.
Riepilogo
In questo tutorial, abbiamo imparato come eseguire il deploy di un contratto Solidity utilizzando Truffle su testnet e mainnet. Abbiamo creato un semplice contratto, configurato l´ambiente e seguito le best practice per garantire un deploy sicuro ed efficiente. Ricorda sempre di testare i tuoi contratti su testnet prima di passarli sulla mainnet.
