Lição: 098: Escrevendo Migrations no Truffle
Nesta aula, vamos explorar como escrever migrations no Truffle, um framework de desenvolvimento popular para contratos inteligentes Ethereum. As migrations são essenciais para implantar contratos na blockchain e gerenciar suas atualizações. Ao final desta aula, você entenderá como criar, modificar e executar migrations para seus contratos inteligentes em Solidity.
O que são Migrations?
Migrations no Truffle são scripts que ajudam a implantar seus contratos inteligentes em uma rede Ethereum. Elas garantem que seus contratos sejam implantados na ordem correta e permitem gerenciar facilmente as alterações nos seus contratos ao longo do tempo. As migrations fornecem uma maneira de acompanhar quais contratos foram implantados e de atualizá-los ou reimplantá-los conforme necessário.
Configurando seu Projeto Truffle
Antes de escrevermos quaisquer migrations, vamos configurar um projeto Truffle simples. Se você ainda não fez isso, instale o Truffle globalmente usando npm:
npm install -g truffle
Em seguida, crie um novo diretório para o seu projeto:
mkdir MeuProjetoTruffle
cd MeuProjetoTruffle
Agora, inicialize um novo projeto Truffle:
truffle init
Este comando criará a seguinte estrutura de diretório:
MeuProjetoTruffle/
├── contratos/
├── migrations/
├── teste/
├── truffle-config.js
Escrevendo Sua Primeira Migration
No diretório migrations
, você encontrará um arquivo chamado 1_initial_migration.js
. Este arquivo contém uma migration padrão para o contrato Migrations
, que é usado pelo Truffle para acompanhar quais migrations foram executadas.
Vamos criar um novo contrato inteligente chamado MeuContrato.sol
no diretório contratos
:
// contratos/MeuContrato.sol
pragma solidity ^0.8.0;
contract MeuContrato {
string public nome;
constructor(string memory _nome) {
nome = _nome;
}
}
Agora, precisamos escrever uma migration para implantar MeuContrato
. Crie um novo arquivo de migration no diretório migrations
chamado 2_deploy_meu_contrato.js
:
// migrations/2_deploy_meu_contrato.js
const MeuContrato = artifacts.require("MeuContrato");
module.exports = function (deployer) {
deployer.deploy(MeuContrato, "Olá, Truffle!");
};
Neste script de migration, estamos fazendo o seguinte:
- Importando o artefato
MeuContrato
usando a funçãoartifacts.require
do Truffle. - Exportando uma função que recebe o
deployer
como argumento. - Usando
deployer.deploy
para implantar o contratoMeuContrato
com o argumento do construtor "Olá, Truffle!".
Executando Migrations
Agora que escrevemos a migration, é hora de implantá-la na blockchain. Primeiro, certifique-se de que você tenha uma rede de desenvolvimento Ethereum local rodando. Você pode usar o Ganache, que pode ser instalado separadamente.
Se você estiver rodando o Ganache, certifique-se de que ele esteja aberto e escutando na porta padrão (7545). Agora, execute o seguinte comando no seu terminal:
truffle migrate
O Truffle irá compilar seus contratos e executar as migrations na ordem correta. Você deverá ver uma saída semelhante a esta:
Iniciando migrations...
======================
> Nome da rede: 'desenvolvimento'
> ID da rede: 5777
> Limite de gás do bloco: 6721975 (0x6691b8)
1_initial_migration.js
========================
> Implantando Migrations...
> Migrations: 0x1234567890abcdef1234567890abcdef12345678
> Salvando migration na rede.
> Salvando artefatos...
> Migrations já foram executadas para esta rede.
2_deploy_meu_contrato.js
========================
> Implantando MeuContrato...
> MeuContrato: 0xabcdefabcdefabcdefabcdefabcdefabcdefabcdef
> Salvando migration na rede.
> Salvando artefatos...
> MeuContrato foi implantado com sucesso.
Modificando Migrations
Se você precisar alterar seu contrato, pode fazê-lo modificando o código do contrato inteligente. Vamos supor que queiramos mudar o construtor para aceitar um segundo parâmetro para o MeuContrato
.
Atualize o arquivo MeuContrato.sol
:
// contratos/MeuContrato.sol
pragma solidity ^0.8.0;
contract MeuContrato {
string public nome;
uint public numero;
constructor(string memory _nome, uint _numero) {
nome = _nome;
numero = _numero;
}
}
Você também precisará atualizar a migration para considerar esse novo parâmetro. Modifique o arquivo 2_deploy_meu_contrato.js
:
// migrations/2_deploy_meu_contrato.js
const MeuContrato = artifacts.require("MeuContrato");
module.exports = function (deployer) {
deployer.deploy(MeuContrato, "Olá, Truffle!", 42);
};
Depois de fazer essas alterações, você pode implantar as migrations novamente. No entanto, pode ser necessário redefinir as migrations se o contrato já tiver sido implantado para refletir as mudanças:
truffle migrate --reset
Conclusão
Nesta aula, você aprendeu como escrever migrations no Truffle para implantar contratos inteligentes em Solidity. Você pode criar scripts de migration para implantar, atualizar e gerenciar seus contratos na blockchain Ethereum. As migrations são uma parte crucial do processo de desenvolvimento, garantindo que seus contratos sejam implantados corretamente e que você possa mantê-los ao longo do tempo.
Sinta-se à vontade para experimentar criando contratos adicionais e seus respectivos scripts de migration. Bons códigos!