---
title: "Interactuar con un smart contract"
description: "Guía paso a paso sobre cómo interactuar con un smart contract de Ethereum desplegado, actualizando una variable del smart contract."
---

# Interactuar con un smart contract

Antes de comenzar este tutorial sobre cómo interactuar con un smart contract, debes haber completado la parte 1 — [Hello World Smart Contract](https://www.alchemy.com/docs/how-to-deploy-a-smart-contract-to-the-sepolia-testnet) \(crear y desplegar un smart contract\). En la parte 3 veremos [cómo enviar nuestro contrato a Etherscan](https://www.alchemy.com/docs/best-practices-for-deploying-a-smart-contract-on-evm-mainnets-1) para que cualquiera pueda entender cómo interactuar con él!

<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: interactuar con tu smart contract

Ahora que desplegamos exitosamente un smart contract en la red ropsten, probemos nuestras habilidades de web3 e interactuemos con él!

### Paso 1: crea un archivo interact.js

Este es el archivo donde escribiremos nuestro script de interacción. Usaremos la librería Ethers.js que instalaste previamente en la Parte 1.

Dentro de tu carpeta `scripts/` para el tutorial de hardhat, o tu directorio home para el tutorial de Truffle, crea un nuevo archivo llamado `interacts.js` y agrega las siguientes líneas de código:

### Paso 2: actualiza tu archivo .env

Vamos a usar nuevas variables de entorno, así que necesitamos definirlas en nuestro archivo `.env` y asegurarnos de que el módulo `dotenv` esté cargando estas variables.

Necesitaremos agregar una definición para nuestro `API\_KEY` de Alchemy y el `CONTRACT\_ADDRESS` donde se desplegó tu smart contract.

Tu archivo `.env` debería verse algo así:

### Paso 3: obtén el ABI de tu contrato

El ABI de nuestro contrato \(Application Binary Interface\) es la interfaz para interactuar con nuestro smart contract. Puedes aprender más sobre los Contract ABIs en nuestro [eth_getLogs deep dive](https://www.alchemy.com/docs/deep-dive-into-eth_getlogs) aquí. Hardhat \(y Truffle\) genera automáticamente un ABI para nosotros y lo guarda en el archivo HelloWorld.json.

Para usar esto necesitaremos extraer el contenido agregando las siguientes líneas de código a nuestro archivo `contract-interact.js`:

Si quieres ver el ABI puedes imprimirlo en tu consola:

Para ejecutar `interact.js` y ver tu ABI impreso en la consola navega a tu terminal y ejecuta

#### Hardhat:

#### Truffle:

### Paso 4: crea una instancia de tu contrato

Para interactuar con nuestro contrato necesitamos crear una instancia de él en nuestro código. Para hacerlo con Ethers.js, necesitaremos trabajar con tres conceptos:

1. Provider - este es un node provider que te da acceso de lectura y escritura a la blockchain.
1. Signer - esto representa una cuenta de Ethereum que tiene la capacidad de firmar transacciones.
1. Contract - este es un objeto de Ethers.js que representa un contrato específico desplegado on-chain.

Usaremos el ABI del contrato del paso anterior para crear nuestra instancia del contrato:

Puedes leer más sobre [Providers](https://www.alchemy.com/docs), [Signers](https://www.alchemy.com/docs), y [Contracts](https://www.alchemy.com/docs) en las explicaciones de Ethers.js de Alchemy.

### Paso 5: lee el mensaje inicial

¿Recuerdas cuando desplegamos nuestro contrato con `theinitMessage = "Hello world!"`? Ahora vamos a leer ese mensaje almacenado en nuestro smart contract e imprimirlo en la consola.

En JavaScript usamos funciones asíncronas para interactuar con redes.

Usa el código de abajo para llamar a la función `message` en nuestro smart contract y leer el mensaje inicial:

Después de ejecutar el archivo usando `npx hardhat run scripts/interact.js` en la terminal deberíamos ver esta respuesta:

¡Felicitaciones! Acabas de leer exitosamente datos de un smart contract desde la blockchain de Ethereum, muy bien!

### Paso 6: actualiza el mensaje

Ahora, en lugar de solo leer el mensaje, también podemos actualizar el mensaje guardado en nuestro smart contract usando la función `update`! Bastante interesante, ¿no?

Para hacerlo podemos llamar directamente a la función `update` en nuestro objeto Contract instanciado, así:

Nota que hacemos una llamada a `.wait\(\)` en el objeto de transacción retornado. Esto asegura que nuestro script espere a que la transacción sea minada en la blockchain antes de continuar. Si dejaras fuera esta línea, es posible que tu script no pueda ver el valor actualizado de `message` en tu contrato.

### Paso 7: lee el nuevo mensaje

Deberías poder repetir el Paso 5 para leer el valor actualizado de `message`. Tómate un momento y mira si puedes hacer los cambios necesarios para imprimir ese nuevo valor!

Si necesitas una pista, así debería verse tu archivo `interact.js` en este punto:

Ahora solo ejecuta el script y deberías poder ver el mensaje anterior, el estado de actualización, y el nuevo mensaje impresos en tu terminal!

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

Mientras ejecutas ese script, puede que notes que el paso de `Updating the message... ` tarda un poco en cargar antes de que se establezca el nuevo mensaje. ¡Eso se debe al proceso de minado! Si tienes curiosidad sobre cómo rastrear transacciones mientras se están minando, visita el Alchemy mempool para ver el estado de tu transacción \(si está pendiente, minada, o fue descartada por la red\). Si tu transacción fue descartada, también es útil revisar Ropsten Etherscan y buscar tu hash de transacción.

¡Y eso es todo! Ahora has desplegado e interactuado con un smart contract de Ethereum. Si quieres publicar tu contrato en Etherscan para que cualquiera sepa cómo interactuar con él, revisa la parte 3: [enviar tu smart contract a etherscan](https://www.alchemy.com/docs/best-practices-for-deploying-a-smart-contract-on-evm-mainnets-1)! 🎉

Una vez que completes este tutorial, cuéntanos cómo fue tu experiencia o si tienes algún comentario etiquetándonos en Twitter @Alchemy!
