Mi código:
const tokens = { usdt: "0xbA6879d0Df4b09fC678Ca065c00dd345AdF0365e" } const minABI = [ { constant: true, inputs: [{ name: "_owner", type: "address" }], name: "balanceOf", outputs: [{ name: "balance", type: "uint256" }], type: "function", }, ]; async function getUsdtBalance() { const accounts = await ethereum.request({ method: 'eth_requestAccounts' }); const Web3Client = new Web3(window.ethereum); const contract = new Web3Client.eth.Contract(minABI, tokens.usdt) const result = await contract.methods.balanceOf(accounts[0]).call(); const format = Web3Client.utils.fromWei(result); console.log(format) }Error: los valores devueltos no son válidos, ¿se quedó sin gasolina? También puede ver este error si no está utilizando la ABI correcta para el contrato del que está recuperando datos, solicitando datos de un número de bloque que no existe o consultando un nodo que no está completamente sincronizado.
Es una red de prueba. Tengo 99 eth, y 0 usdt.
Lo más probable es un error en el ABI, yo mismo no entiendo nada, lo saqué de la guía.
Parece que el código está funcionando. También creo que hay un problema con el ABI. Cambiaría el ABI a algo como esto:
const minABI = [ { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]; He agregado un campo llamado stateMutability . Este campo le permite definir cómo debe interactuar la función con los datos en la cadena de bloques. En nuestro caso no estamos modificando los datos, sino solo leyéndolos, por lo que ponemos el valor a view .
Si todavía hay un problema, puede tener sentido verificar la dirección del token.