Ejecución de Aplicaciones Descentralizadas con Metamask
19/27
Recursos
Una vez hallas desarrollado la lógica de conexión con tu contrato inteligente, es momento de poner a prueba la interacción con el mismo y crear una simple interfaz web.
Interactuando con un contrato inteligente
Dependiendo la lógica del smart contract que hayas desarrollado, sabrás qué hace este y cómo desarrollar la interfaz web. Siguiendo nuestro ejemplo, vamos a crear un par de botones en el HTML que nos permitirán obtener el valor actual del contador que guardamos en el contrato e incrementarlo con otro botón.
```
```
Observa también que modificamos la función getCounter() para permitir capturar y modificar el valor del input con ID "counter" y mostrar aquí el valor actual del contador.
Finalmente, necesitaremos de un servidor web que levante el HTML y ejecute el código Javascript y lograr probar nuestra primera aplicación descentralizada. Para esto, puedes utilizar Lite Server instalándolo como dependencia con npm i -g lite-server y ejecutándolo con el comando lite-server. Presta atención de situar tu consola dentro del directorio donde tengas tu archivo .html.
La interfaz que hemos desarrollado es súper sencilla, pero lo suficiente para interactuar con el contrato y mostrar el valor actual del contador con el botón apropiado, e incrementarlo con el otro botón.
Verás que, cada vez que deseas hacer una modificación en la blockchain, en este caso incrementar el contador, tu wallet Metamask te solicitará permisos para ejecutar la transacción y pagar la comisión a la red.
Si algo va mal, recuerda utilizar las herramientas de desarrollo que el navegador nos provee para observar la consola y obtener alguna pista sobre qué ha ido mal.
¡Felicitaciones! Has desarrollado tu primera aplicación descentralizada e interactuado con un smart contract desde un front-end.
quede muy insatisfecho con la sección de hardhat, simplemente no funciona el método getCounter.
En las clases nunca se ejecuto primero el test, si lo hubieran hecho se darían cuenta a que me refiero. Y al configurar remix con la cuenta de sepolia en metamask, y darle la dirección del contrato, desde ahí se puede ejecutar sin problema aparentemente, pero la variable counter no se modifica quizás por el tipo de storage que se esta usando para ejecutar el contador.
Aun no entiendo muy bien como funciona eso de las firmas con metamask, por que en incremet o setcounter, pide una aprobacion pero para getcounter no, aparte es lentisimo, no se si asi sea todo en la web 3 o solo es asi por lo que estamos en red de pruebas
Si alguien esta usando vscode se puede usar la opcion de live server, para desplegar en el browser una pagina web sencilla

en la version que tengo de ethers ya no se usa Web3Provider sino BrowserProvider>const provider = new ethers.BrowserProvider(window.ethereum, 'sepolia');
```js
const provider = new ethers.BrowserProvider(window.ethereum, 'sepolia');
```
//Agregué la nueva función en el contrato
function setCounter(uint _value) public{
counter = _value;
}
//Compilé y desplegué un nuevo contrato
//npx hardhat compile
//Modifiqué el archivo
//hardhat.config.js
//En el script del html cambié const CONTRACT_ADDRESS por el nuevo valor de abi en Counter.json.
//También agregué la función
async function setCounter() {
const countervalue = await document.getElementById("setcounter").value
await contract.setCounter(countervalue)
}
//Desplegué el contrato
//npx hardhat run scripts/deploy.js --network sepolia
// Configuración e botones
<div>
<form><labelfor="set-counter">Enter a value to set counter: </label><inputid="set-counter"type="text" /><buttononclick="setCounter()"type="button" >Set counter</button></form><buttononclick="increment()"type="button" >Increment</button><buttononclick="getCounter()"type="button" >Get Counter</button><inputdisabletype="text"id="counter" />
</div>
//...// Función set counterasyncfunctionsetCounter(valueCounter = document.getElementById("set-counter").value) {
await contract.setCounter(valueCounter);
}
No olvides que antes de probar tu aplicación tengas conectada tu Wallet de Metamask a la red con la que vas a probarla y que tengas algo de saldo en tu cuenta para pagar el gas, obviamente si es una Testnet puedes obtener algunos tokens de las faucets correspondientes, en el caso que lances tu dapp en la Mainnet de Ethereum, tendrás que utilizar Ethers con valor real.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?