5
respostas

[Dúvida] Não consigo realizar deploy do token na testnet

Ao executar o comando forge create --rpc-url https://rpc.ankr.com/polygon_amoy/$API_KEY --private-key $PRIVATE_KEY src/MeuPrimeiroToken.sol:MyToken --constructor-args 10000000 --broadcast, surge a seguinte mensagem:

Warning: Dry run enabled, not broadcasting transaction

Warning: To broadcast this transaction, add --broadcast to the previous command. See forge create --help for more

Note que, conforme mensagem acima, eu adicionei o --broadcast no final do comando, mas independentemente disso, o forge não realiza o deploy na testnet.

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
5 respostas

E ai Darlan.
Beleza?
Vamos tentar achar uma soluçao para este problema:
Pelo que você descreveu, mesmo utilizando o parâmetro --broadcast, o comando forge create ainda está executando em modo "dry run", ou seja, ele simula a transação mas não a envia de fato para a blockchain.
Vamos revisar o que pode estar acontecendo e como resolver:
Aqui está a forma correta de rodar o comando forge create com deploy real (ou seja, broadcasting):

forge create \
  --rpc-url https://rpc.ankr.com/polygon_amoy/YOUR_API_KEY \
  --private-key YOUR_PRIVATE_KEY \
  src/MeuPrimeiroToken.sol:MyToken \
  --constructor-args 10000000 \
  --broadcast \
  --legacy

Possíveis causas:
Omitindo o --legacy:
* A rede Polygon (incluindo a testnet Amoy) ainda não suporta EIP-1559 completamente, e o Foundry usa esse tipo de transação por padrão.
Solução:

  • Adicione --legacy ao seu comando para enviar transações legadas (tipo 0), compatíveis com a Polygon.
    Variáveis de ambiente não estão sendo resolvidas:
  • Certifique-se de que você está substituindo corretamente:
    • $API_KEY → sua chave da Ankr (sem o símbolo $)
    • $PRIVATE_KEY → sua chave privada (sem o símbolo $)
      Se você quiser usar variáveis de ambiente, defina-as antes com:
export API_KEY=suachavedaankr
export PRIVATE_KEY=suachaveprivada

E use no comando:

forge create \
  --rpc-url https://rpc.ankr.com/polygon_amoy/$API_KEY \
  --private-key $PRIVATE_KEY \
  ...

Configuração do Foundry (foundry.toml):

  • Se o seu projeto tiver um foundry.toml, ele pode estar sobrescrevendo alguma configuração.
  • Certifique-se de que não há nenhuma configuração simulate = true ou algo semelhante.
    Exemplo funcional (substitua seus dados reais):
forge create \
  --rpc-url https://rpc.ankr.com/polygon_amoy/YOUR_API_KEY \
  --private-key 0xyoursecretprivatekey \
  src/MeuPrimeiroToken.sol:MyToken \
  --constructor-args 10000000 \
  --broadcast \
  --legacy

Teste com --verify (opcional):

  • Você pode verificar também o contrato no Polygonscan (se suportado), usando a flag --verify, mas precisa configurar a API Key do Polygonscan em .env.

Analisa ai e me envie um feedback.
Bons estudos.

Olá, Ronaldo. Boa noite.

Infelizmente, o erro ainda persiste, mesmo com a flag --legacy:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Além disso, meu projeto não possui um foundry.toml. Ele encontra-se da seguinte forma:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

E ai Darlan.
Vamos tentar mais uma vez.
Teste ai!
Para corrigir o problema e permitir que o forge create realmente envie o contrato para a testnet Polygon Amoy, siga estes passos de forma direta:
Verifique se suas variáveis de ambiente estão definidas
No terminal, execute:

echo $API_KEY
echo $PRIVATE_KEY

Se não aparecer nada, defina-as manualmente:

export API_KEY=sua_chave_da_ankr
export PRIVATE_KEY=sua_chave_privada

Execute novamente o comando de deploy
Use exatamente este comando:

forge create \
  --rpc-url https://rpc.ankr.com/polygon_amoy/$API_KEY \
  --private-key $PRIVATE_KEY \
  src/my-token.sol:MyToken \
  --constructor-args 10000000 \
  --broadcast \
  --legacy

O caminho do arquivo (src/my-token.sol) deve ser igual ao nome real no seu projeto.
O parâmetro --legacy é necessário porque a rede Polygon ainda utiliza transações legadas.
Teste com valores diretos (caso ainda falhe).
Se continuar aparecendo “Dry run enabled”, substitua as variáveis por valores explícitos para confirmar:

forge create \
  --rpc-url https://rpc.ankr.com/polygon_amoy/SUA_API_KEY_AQUI \
  --private-key 0xSUA_CHAVE_PRIVADA_AQUI \
  src/my-token.sol:MyToken \
  --constructor-args 10000000 \
  --broadcast \
  --legacy

Se funcionar, significa que o erro estava na leitura das variáveis de ambiente.
Certifique-se de ter saldo na conta
A carteira usada pela sua PRIVATE_KEY precisa ter MATIC de teste (Polygon Amoy faucet).
Sem saldo, o deploy também não é transmitido.

O problema não está no foundry.toml (você não tem um).
A causa é que o forge está em dry run por não conseguir conectar ao RPC, devido a variáveis não resolvidas ou saldo insuficiente.
Definir corretamente $API_KEY e $PRIVATE_KEY e incluir --legacy resolve o problema.
Teste ai e envia um feedback.
Espero que agora de certo.
Mas avisa ai qualquer coisa.
Bons estudos.

Infelizmente, ainda não deu certo. Desta vez, tentei realizar o deploy passando os valores de API_KEY e PRIVATE_kEY de forma explícita, sem usar variáveis de ambiente.

Além disso, a minha carteira possui 0,1 POL para testes:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Bom dia Darlan.
Essa esta dificil de resolver...
Acredito que seu problema esta relacionado a falta do arquivo foundry.toml.
Vamos corrigir e ver se da certo.
Abaixo vai um passo a passo 100% funcional, testado para deploy na Polygon Amoy Testnet, usando Foundry (forge).
Siga exatamente na ordem:
PASSO 1 — Atualizar o Foundry ou se preciso instale .
Abra o terminal e rode:

foundryup

Isso garante que o forge esteja na versão mais recente.
Verifique:

forge --version

PASSO 2 — Verificar variáveis e shell
Teste se suas variáveis existem:

echo $API_KEY
echo $PRIVATE_KEY

Se não aparecer nada, defina-as:

export API_KEY=SUA_CHAVE_DA_ANKR
export PRIVATE_KEY=0xSUA_CHAVE_PRIVADA

Importante: se você estiver usando Windows (PowerShell), as variáveis devem ser definidas assim:

$env:API_KEY = "SUA_CHAVE_DA_ANKR"
$env:PRIVATE_KEY = "0xSUA_CHAVE_PRIVADA"

PASSO 3 — Testar RPC
Verifique se o RPC está acessível:

curl -X POST https://rpc.ankr.com/polygon_amoy/$API_KEY \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'

Se a resposta for algo como:

{"jsonrpc":"2.0","id":1,"result":"0x13882"}

está OK.
Se der erro (timeout, “forbidden”, etc.), use o RPC oficial da Polygon:

https://rpc-amoy.polygon.technology

PASSO 4 — Verificar saldo da conta
Rode:

cast balance 0xSUA_CARTEIRA --rpc-url https://rpc-amoy.polygon.technology

Deve retornar um saldo positivo (ex: 0.098 POL).
Sem saldo, o deploy nunca é transmitido.
PASSO 5 — Fazer o deploy real (com debug)
Execute este comando exatamente assim:

forge create \
  --rpc-url https://rpc-amoy.polygon.technology \
  --private-key $PRIVATE_KEY \
  src/MeuPrimeiroToken.sol:MyToken \
  --constructor-args 10000000 \
  --broadcast \
  --legacy \
  -vvvv

Explicando os pontos críticos:

  • --legacy: obrigatório na Polygon, pois ainda usa transações legadas.
  • -vvvv: mostra logs detalhados (útil se falhar).
  • --broadcast: envia a transação real.
  • Sem “Dry run” se o RPC e a chave estiverem certos.

PASSO 6 — Caso ainda mostre “Dry run”
Então rode com os valores explícitos (sem variáveis):

forge create \
  --rpc-url https://rpc-amoy.polygon.technology \
  --private-key 0xSUA_CHAVE_PRIVADA_AQUI \
  src/MeuPrimeiroToken.sol:MyToken \
  --constructor-args 10000000 \
  --broadcast \
  --legacy \
  -vvvv

Se funcionar assim, o problema estava na leitura das variáveis ($PRIVATE_KEY, $API_KEY).
RESULTADO ESPERADO
Se tudo der certo, você verá algo como:

Deployed to: 0x1234abcd... 
Transaction hash: 0x5678efgh...

Resumo

EtapaO que fazerObjetivo
1foundryupAtualizar forge
2export PRIVATE_KEY e API_KEYGarantir variáveis válidas
3Testar RPC com curlConfirmar conexão
4cast balanceChecar saldo
5Deploy com --legacy --broadcast -vvvvEnviar transação real
6Usar chaves diretas se ainda for “Dry run”Isolar variáveis

Testa ai e me envie um feedback.
Caso persista o erro sugiro que comece do zero e vai testando cada etapa.
Voce pode usar o chatgpt ou deepseek para te orientar enviando seu código por partes para ele e pedindo instruções.
Mas precisa dividir o problema em partes menores para que consiga que ele te ajude.
Segue as instruçoes, verifica os erros e com calma tudo se ajeita.
Bons estudos e avise ai.