Ir para o conteúdo

Usando Foundry para implantar na sua rede EVM

Introdução

Foundry é um ambiente de desenvolvimento Ethereum escrito em Rust que ajuda a gerenciar dependências, compilar projetos, executar testes, implantar contratos e interagir com blockchains pela linha de comando. Foundry interage diretamente com a API Ethereum das redes EVM baseadas na Tanssi, então você pode usá-lo para implantar e interagir com contratos inteligentes na sua rede Tanssi.

Quatro ferramentas compõem o Foundry:

  • Forge – compila, testa e implanta contratos
  • Cast – CLI para interagir com contratos
  • Anvil – nó TestNet local para desenvolvimento que pode bifurcar redes existentes
  • Chisel – REPL Solidity para testar rapidamente trechos de código

Este guia mostra como usar o Foundry para compilar, implantar e depurar contratos Ethereum na rede EVM de demonstração. Para sua própria rede Tanssi, basta trocar a URL RPC e o Chain ID nos exemplos.

Verificando pré-requisitos

Você precisará de:

Criando um projeto Foundry

Crie um projeto Foundry se ainda não tiver um:

  1. Instale o Foundry (no Windows é necessário instalar Rust e compilar a partir da fonte):

    curl -L https://foundry.paradigm.xyz | bash foundryup
    
    curl -L https://foundry.paradigm.xyz | bash foundryup
    
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs/ | sh
    cargo install --git https://github.com/foundry-rs/foundry foundry-cli anvil --bins --locked
    

    Após instalar, talvez seja necessário reiniciar o terminal ou adicionar foundryup ao PATH.

  2. Inicialize o projeto, que criará uma pasta com três subpastas:

    forge init foundry
    

Se aparecer um erro sobre diretório Git já existente, faça um commit (ou um commit falso) e execute novamente.

O projeto padrão cria:

  • lib – dependências como submódulos git
  • src – seus contratos inteligentes
  • test – testes Forge em Solidity

Um repositório git e um .gitignore pré-preenchido também são criados.

A pasta src

O repositório padrão inclui Counter.sol em src, Counter.s.sol em script e Counter.t.sol em test. Exclua-os para evitar erros ao compilar/implantar MyToken.sol:

rm src/Counter.sol script/Counter.s.sol test/Counter.t.sol

Crie o contrato ERC-20 de exemplo:

cd src
touch MyToken.sol

Abra o arquivo e adicione:

pragma solidity ^0.8.0;

// Import OpenZeppelin Contract
import "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol";

// This ERC-20 contract mints the specified amount of tokens to the contract creator
contract MyToken is ERC20 {
  constructor(uint256 initialSupply) ERC20("MyToken", "MYTOK") {
    _mint(msg.sender, initialSupply);
  }
}

Antes de compilar, instale os contratos OpenZeppelin como dependência. O Foundry usa submódulos git por padrão; use o repositório GitHub:

forge install OpenZeppelin/openzeppelin-contracts

Compilando Solidity

Depois das dependências, compile o contrato:

forge build

Foundry Contract Compile

Serão criadas as pastas out e cache (já ignoradas no .gitignore) com ABI e bytecode.

Implantando o contrato

Para implantar com o Forge é um comando só, mas requer endpoint RPC, chave privada financiada e argumentos do construtor. MyToken.sol pede oferta inicial; o exemplo usa 100:

forge create --rpc-url https://services.tanssi-testnet.network/dancelight-2001/ \
--constructor-args 100 \
--private-key INSERT_YOUR_PRIVATE_KEY \
src/MyToken.sol:MyToken

Após alguns segundos o contrato é implantado; o endereço aparece no terminal.

Foundry Contract Deploy

Interagindo com o contrato

Use o Cast (CLI) para fazer chamadas RPC.

Recupere o nome do token (substitua INSERT_YOUR_CONTRACT_ADDRESS):

cast call INSERT_YOUR_CONTRACT_ADDRESS "name()" --rpc-url https://services.tanssi-testnet.network/dancelight-2001/

Converta o retorno hexadecimal para ASCII:

cast --to-ascii 0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000074d79546f6b656e00000000000000000000000000000000000000000000000000

Para queimar tokens enviando-os ao endereço zero:

cast send --private-key INSERT_YOUR_PRIVATE_KEY \
--rpc-url https://services.tanssi-testnet.network/dancelight-2001/ \
--chain 5678 \
INSERT_YOUR_CONTRACT_ADDRESS \
"transfer(address,uint256)" 0x0000000000000000000000000000000000000001 1

Bifurcando com Anvil

Anvil é um nó local que pode bifurcar redes. Para bifurcar a rede demo EVM:

anvil --fork-url https://services.tanssi-testnet.network/dancelight-2001/

A instância terá 10 contas de desenvolvimento pré-financiadas. Verifique o último bloco e compare com a rede demo:

curl --data '{"method":"eth_blockNumber","params":[],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545

Depois, você pode implantar novos contratos ou interagir com os existentes. Exemplo para ver saldo dos tokens cunhados:

cast call INSERT_CONTRACT_ADDRESS "balanceOf(address)(uint256)" INSERT_YOUR_ADDRESS --rpc-url http://localhost:8545

Usando Chisel

Chisel é um REPL Solidity. Escreva Solidity direto no console para testar rapidamente, sem montar projeto ou implantar contrato.

Para iniciar:

chisel

Exemplo de codificação ABI:

bytes memory myData = abi.encode(100, true, "Build with Tanssi");

Veja como o valor é armazenado em memória:

!memdump

Descubra a posição na pilha:

!rawstack myData

Você verá que myData está em 0x80; o dump de memória mostrará os valores correspondentes.

Limpe o estado do Chisel se quiser recomeçar:

!clear

Você também pode avaliar expressões diretamente:

abi.encode(100, true, "Build with Tanssi")

Para persistir estado:

uint256 myNumber = 101;
!save 1
!quit

Depois, liste e carregue:

chisel list
chisel load 1
!rawstack myNumber

É possível bifurcar dentro do Chisel:

!fork https://services.tanssi-testnet.network/dancelight-2001/

E consultar, por exemplo, saldo de uma conta:

0x44236223aB4291b93EEd10E4B511B37a398DEE55.balance

Foundry com Hardhat

Se você precisa integrar a um projeto já configurado em Hardhat, é possível criar um projeto híbrido com o plugin hardhat-foundry:

npm init
npm install --save-dev hardhat @nomicfoundation/hardhat-foundry
npx hardhat init

Edite hardhat.config.js para incluir:

require('@nomicfoundation/hardhat-foundry');

Mova os contratos de contracts para src e ajuste foundry.toml para incluir lib e node_modules:

[profile.default]
src = 'src'
out = 'out'
libs = ['lib', 'node_modules']
solc = '0.8.20'
evm_version = 'london'

Agora forge build e npx hardhat compile funcionam; forge test testa Solidity e npx hardhat test testa JavaScript. Você pode unificar em um script:

"scripts": {
  "test": "npx hardhat test && forge test"
}

Parabéns, você implantou e interagiu com contratos na sua rede EVM Tanssi usando o Foundry! Para saber mais, consulte o Foundry Book.

As informações apresentadas aqui foram fornecidas por terceiros e estão disponíveis apenas para fins informativos gerais. A Tanssi não endossa nenhum projeto listado e descrito no Site de Documentação da Tanssi (https://docs.tanssi.network/). A Tanssi Foundation não garante a precisão, integridade ou utilidade dessas informações. Qualquer confiança depositada nelas é de sua exclusiva responsabilidade. A Tanssi Foundation se exime de toda responsabilidade decorrente de qualquer confiança que você ou qualquer outra pessoa possa ter em qualquer parte deste conteúdo. Todas as declarações e/ou opiniões expressas nesses materiais são de responsabilidade exclusiva da pessoa ou entidade que as fornece e não representam necessariamente a opinião da Tanssi Foundation. As informações aqui não devem ser interpretadas como aconselhamento profissional ou financeiro de qualquer tipo. Sempre busque orientação de um profissional devidamente qualificado em relação a qualquer assunto ou circunstância em particular. As informações aqui podem conter links ou integração com outros sites operados ou conteúdo fornecido por terceiros, e tais sites podem apontar para este site. A Tanssi Foundation não tem controle sobre esses sites ou seu conteúdo e não terá responsabilidade decorrente ou relacionada a eles. A existência de qualquer link não constitui endosso desses sites, de seu conteúdo ou de seus operadores. Esses links são fornecidos apenas para sua conveniência, e você isenta e exonera a Tanssi Foundation de qualquer responsabilidade decorrente do uso dessas informações ou das informações fornecidas por qualquer site ou serviço de terceiros.
Última atualização: 9 de dezembro de 2025
| Criada: 9 de dezembro de 2025