Lição: 099: Implantando Contratos com Truffle
Nesta aula, vamos aprender como implantar contratos inteligentes usando o Truffle, um framework de desenvolvimento popular para Ethereum. O Truffle simplifica o processo de desenvolvimento e implantação, fornecendo ferramentas para compilar contratos, executar testes e implantar em diferentes redes.
Pré-requisitos
Antes de começarmos, certifique-se de que você tenha o seguinte instalado:
- Node.js
- npm (Gerenciador de Pacotes do Node)
- Truffle
- Ganache (para desenvolvimento de blockchain local)
Você pode instalar o Truffle globalmente usando npm:
npm install -g truffle
Configurando um Novo Projeto Truffle
-
Criar um Novo Diretório:
Comece criando um novo diretório para o seu projeto e navegue até ele:
mkdir meu-projeto-truffle cd meu-projeto-truffle
-
Inicializar um Projeto Truffle:
Execute o seguinte comando para criar um novo projeto Truffle:
truffle init
Este comando gera a estrutura necessária para o seu projeto, incluindo diretórios para contratos, migrações e testes.
Escrevendo um Contrato Inteligente
Crie um novo arquivo chamado SimpleStorage.sol
no diretório contracts
:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract SimpleStorage {
uint256 private storedData;
function set(uint256 x) public {
storedData = x;
}
function get() public view returns (uint256) {
return storedData;
}
}
Este contrato permite que você armazene e recupere um único inteiro sem sinal.
Escrevendo um Script de Migração
Os scripts de migração são usados pelo Truffle para implantar contratos na rede Ethereum. Crie um novo arquivo de migração no diretório migrations
, chamado 2_deploy_contracts.js
:
const SimpleStorage = artifacts.require("SimpleStorage");
module.exports = function (deployer) {
deployer.deploy(SimpleStorage);
};
Este script informa ao Truffle para implantar o contrato SimpleStorage
.
Configurando o Truffle
Antes de implantar, você pode precisar configurar o arquivo truffle-config.js
para especificar as configurações de rede. Para desenvolvimento local com Ganache, você pode manter simples. Certifique-se de que há uma configuração para a rede de desenvolvimento assim:
module.exports = {
networks: {
development: {
host: "127.0.0.1", // Localhost (padrão: nenhum)
port: 7545, // Porta da GUI do Ganache
network_id: "*", // Qualquer rede (padrão: nenhum)
},
},
// Configurações adicionais podem ser adicionadas aqui
};
Executando o Ganache
Antes de implantar, você precisará executar o Ganache. Se você estiver usando a versão GUI, basta iniciar o aplicativo. Se preferir a versão CLI, você pode instalá-la globalmente usando npm e depois executar:
npm install -g ganache-cli
ganache-cli
Isso iniciará uma blockchain Ethereum local para fins de teste.
Implantando o Contrato
Agora que tudo está configurado, você pode implantar seu contrato na blockchain local do Ganache. Abra um terminal no diretório do seu projeto e execute:
truffle migrate --network development
Este comando compila seus contratos e os implanta na rede especificada (neste caso, a rede development
).
Interagindo com o Contrato
Após a implantação bem-sucedida, você pode interagir com o contrato implantado usando o Truffle Console. Abra uma nova janela de terminal e inicie o Truffle Console com o seguinte comando:
truffle console --network development
Dentro do console, você pode interagir com seu contrato:
// Obter a instância do contrato implantado
let instance = await SimpleStorage.deployed();
// Definir um valor
await instance.set(42);
// Obter o valor armazenado
let value = await instance.get();
console.log(value.toString()); // Deve exibir: 42
Conclusão
Nesta aula, cobrimos como configurar um projeto Truffle, escrever um contrato inteligente simples, implantá-lo em uma blockchain local usando o Ganache e interagir com ele. O Truffle oferece um processo simplificado para o desenvolvimento em Ethereum, facilitando a gestão de contratos e implantações.
À medida que você avança em sua jornada de desenvolvimento em Ethereum, não hesite em explorar mais recursos avançados oferecidos pelo Truffle, como testes e implantações em redes públicas!