Situación
Creé un contrato inteligente e importé el abi y la dirección del contrato en mi aplicación de reacción.
He accedido con éxito a los métodos y opciones dentro de mi aplicación de reacción. Usé useEffect sin problemas.
Problema
Sin embargo, estoy luchando por conseguir el saldo del contrato. He intentado todo lo que entiendo sin resultado.
Este código funciona bien
import web3 from "./web"; import { useState, useEffect } from "react"; import Lottery from "./Lottery"; const [isManager, setManager] = useState( "<em>Loading manager address...</em>" ); useEffect(() => { const getManager = async () => { const mangWallet = await Lottery.methods.manager().call(); console.log(mangWallet); setManager(mangWallet); }; getManager(); }, []); Esto NO funciona: el saldo sigue siendo 0. Más importante aún, el registro de la consola ni siquiera muestra 0. ¿Es como si toda la función getBalance no se estuviera ejecutando?
const [balance, setBalance] = useState(0); useEffect(() => { const getBalance = async () => { const contBal = await web3.eth.getBalance(Lottery.contract_address); setBalance(contBal); console.log(balance); }; getBalance(); }, []);Algunas cosas a tener en cuenta:
contract_address contiene la dirección del contrato inteligente en la cadena, almacenada en el archivo Lottery.jsapp.js Lo que significa que hay dos funciones useEffect .No estoy seguro de cuál es tu problema. Pero creo que esto async const contBal = await web3.eth.getBalance(Lottery.contract_address); puede lanzar una excepción. Así que creo que necesitas agregar try catch así:
const [balance, setBalance] = useState(0); useEffect(() => { const getBalance = async () => { try { const contBal = await web3.eth.getBalance(Lottery.contract_address); setBalance(contBal); console.log(balance); } catch(error) { console.log(error); } }; getBalance(); }, []); Acerca de console.log(balance) , siempre registra 0. Porque es el comportamiento de useEffect . Por lo tanto, debe crear otro useEffect si desea ver el cambio del valor del balance de esta manera:
useEffect(() => { console.log(balance) }, [balance])