---
title: "Interagindo com um smart contract"
description: "Guia passo a passo sobre como interagir com um smart contract Ethereum implantado atualizando uma variável do smart contract."
---

# Interagindo com um smart contract

Antes de começar este tutorial sobre como interagir com um smart contract, você deve ter concluído a parte 1 — [Hello World Smart Contract](https://www.alchemy.com/docs/how-to-deploy-a-smart-contract-to-the-sepolia-testnet) \(criando e fazendo deploy de um smart contract\). Na parte 3 vamos abordar [como enviar nosso contrato para o Etherscan](https://www.alchemy.com/docs/best-practices-for-deploying-a-smart-contract-on-evm-mainnets-1) para que qualquer pessoa possa entender como interagir com ele!

<ExternalVideo
  url="https://www.youtube.com/watch?v=sQJ-XQBzEuc&embeds_referring_euri=https%3A%2F%2Fcdn.iframe.ly%2F&source_ve_path=OTY3MTQ&feature=emb_imp_woyt&ab_channel=Alchemy"
  provider="youtube"
  providerUid="sQJ-XQBzEuc"
/>

## Parte 2: interaja com seu smart contract

Agora que fizemos o deploy com sucesso de um smart contract na rede ropsten, vamos testar nossas habilidades de web3 e interagir com ele!

### Passo 1: crie um arquivo interact.js

Este é o arquivo onde vamos escrever nosso script de interação. Vamos usar a biblioteca Ethers.js que você instalou anteriormente na Parte 1.

Dentro da sua pasta `scripts/` do tutorial do hardhat, ou do seu diretório home no caso do tutorial do Truffle, crie um novo arquivo chamado `interacts.js` e adicione as seguintes linhas de código:

### Passo 2: atualize seu arquivo .env

Vamos usar novas variáveis de ambiente, então precisamos defini-las no nosso arquivo `.env` e garantir que o módulo `dotenv` esteja carregando essas variáveis.

Precisaremos adicionar uma definição para o nosso `API\_KEY` do Alchemy e o `CONTRACT\_ADDRESS` onde seu smart contract foi implantado.

Seu arquivo `.env` deve ficar mais ou menos assim:

### Passo 3: pegue a ABI do seu contrato

Nossa ABI de contrato \(Application Binary Interface\) é a interface para interagir com nosso smart contract. Você pode aprender mais sobre ABIs de contrato em nosso [eth_getLogs deep dive](https://www.alchemy.com/docs/deep-dive-into-eth_getlogs) aqui. O Hardhat \(e o Truffle\) gera automaticamente uma ABI para nós e a salva no arquivo HelloWorld.json.

Para usá-la, precisamos extrair o conteúdo adicionando as seguintes linhas de código ao nosso arquivo `contract-interact.js`:

Se quiser ver a ABI, você pode imprimi-la no console:

Para executar `interact.js` e ver sua ABI impressa no console, vá até o terminal e execute

#### Hardhat:

#### Truffle:

### Passo 4: crie uma instância do seu contrato

Para interagir com nosso contrato, precisamos criar uma instância dele no nosso código. Para fazer isso com o Ethers.js, vamos precisar trabalhar com três conceitos:

1. Provider - este é um node provider que te dá acesso de leitura e escrita à blockchain.
1. Signer - representa uma conta Ethereum que tem a capacidade de assinar transações.
1. Contract - este é um objeto do Ethers.js que representa um contrato específico implantado on-chain.

Vamos usar a ABI do contrato do passo anterior para criar nossa instância do contrato:

Você pode ler mais sobre [Providers](https://www.alchemy.com/docs), [Signers](https://www.alchemy.com/docs) e [Contracts](https://www.alchemy.com/docs) nos explicadores de Ethers.js do Alchemy.

### Passo 5: leia a init message

Lembra quando implantamos nosso contrato com `theinitMessage = "Hello world!"`? Agora vamos ler essa mensagem armazenada no nosso smart contract e imprimi-la no console.

Em JavaScript usamos funções assíncronas para interagir com redes.

Use o código abaixo para chamar a função `message` no nosso smart contract e ler a init message:

Depois de executar o arquivo usando `npx hardhat run scripts/interact.js` no terminal, devemos ver esta resposta:

Parabéns! Você acabou de ler com sucesso dados de smart contract da blockchain Ethereum, muito bem!

### Passo 6: atualize a mensagem

Agora, em vez de apenas ler a mensagem, também podemos atualizar a mensagem salva no nosso smart contract usando a função `update`! Bem legal, não é?

Para isso, podemos chamar diretamente a função `update` no nosso objeto Contract instanciado, assim:

Note que fazemos uma chamada a `.wait\(\)` no objeto de transação retornado. Isso garante que nosso script espere a transação ser minerada na blockchain antes de prosseguir. Se você deixasse essa linha de fora, seu script poderia não conseguir ver o valor atualizado de `message` no seu contrato.

### Passo 7: leia a nova mensagem

Você deve conseguir repetir o Passo 5 para ler o valor atualizado de `message`. Reserve um momento e veja se consegue fazer as mudanças necessárias para imprimir esse novo valor!

Se precisar de uma dica, é assim que seu arquivo `interact.js` deve ficar neste ponto:

Agora basta executar o script e você deve conseguir ver a mensagem antiga, o status de atualização e a nova mensagem impressos no seu terminal!

`npx hardhat run scripts/interact.js --network ropsten`

Enquanto executa esse script, você pode notar que o passo `Updating the message... ` demora um pouco para carregar antes que a nova mensagem seja definida. Isso se deve ao processo de mineração! Se você tiver curiosidade sobre como acompanhar transações enquanto elas estão sendo mineradas, visite o mempool do Alchemy para ver o status da sua transação \(se está pendente, minerada, ou foi descartada pela rede\). Se sua transação foi descartada, também é útil verificar o Ropsten Etherscan e procurar pelo hash da sua transação.

E é isso! Agora você implantou E interagiu com um smart contract Ethereum. Se quiser publicar seu contrato no Etherscan para que qualquer pessoa saiba como interagir com ele, confira a parte 3: [enviando seu smart contract para o etherscan](https://www.alchemy.com/docs/best-practices-for-deploying-a-smart-contract-on-evm-mainnets-1)! 🎉

Depois de concluir este tutorial, nos conte como foi sua experiência ou se você tem algum feedback nos marcando no Twitter @Alchemy!
