Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

164
Vistas
useDapp y hardhat devolviendo diferentes valores del contrato inteligente

Tengo un nodo de testnet local usando Hardhat. Puedo implementar y probar con éxito mi contrato usando javascript simple, async await y const { ethers, upgrades } = require("hardhat"); .

Estoy devolviendo correctamente e imprimiendo en la consola una matriz BigNumber con 2 elementos de una función de contrato.

Pero la llamada a la función useDapp devuelve un valor diferente.

He intentado todo: JSON.stringify(array) devuelve [[]] , array[0] devuelve indefinido, BigNumber.from(array).toNumber arroja un error de BigNumber loco, etc. Pero sé que el contrato le está dando el correcto valores.

¿Por qué obtengo 2 valores diferentes en 2 archivos javascript diferentes? Supongo que es un problema con la forma en que el archivo de prueba del casco está recuperando los valores frente a useDapp.

Mi enlace frontal de useDapp se ve así y devuelve [Array(0)] con length: 1 :

 export function useGetArray(): BigNumber[] | undefined { const {value,error}: any = useCall({ contract: new Contract(myContract, myInterface), method: "getArray", args: [], }) ?? []; if(error) { return error; } else { return value; }; }

Mi prueba de javascript de hardhat se ve así y devuelve [ BigNumber { value: "50" }, BigNumber { value: "129" } ] :

 CONTRACT = await ethers.getContractFactory("CONTRACT"); const contract = await CONTRACT.attach("0x109d198fca64d33Bd9F33E60333A544412cfAC7D"); array = await contract.getArray(); console.log(array);

Tenga en cuenta que otras 2 llamadas de función casi idénticas que usan useDapp, y una incluso pasa datos al contrato, funcionan completamente bien. Entonces, el problema no radica en la dirección que se usa o en la ABI importada.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Para cualquiera que esté muy confundido con esto, que estoy seguro de que será común en el futuro con los desarrolladores de contratos inteligentes de EVM, la prueba de red predeterminada de hardhat frente a la prueba contra una bifurcación de red principal devolverá diferentes tipos de números del contrato.

Por ejemplo, si usa archivos de prueba .js normales con la red predeterminada, devolver un uint256[] del contrato será un número entero normal.

Pero para la bifurcación de la red principal, devolver un uint256[] devolverá una matriz BigNumber , que javascript tiene problemas para desglosar. Necesitará un paquete BigNumber para trabajar con él. Parece que las interacciones de la bifurcación .js de la red principal requieren obtener el primer elemento de la matriz Array[0] , y dentro de ese elemento estará cada objeto BigNumber , que además debe decodificarse con algo como BigNumber.from(yourNumber).toNumber() .

Nota: en cuanto al envío de números al contrato, debe asegurarse de prestar atención a los decimales de un token cuando se trata de cualquier valor de token. Por ejemplo, si un token tiene 6 decimales programados en el contrato y desea enviar un valor al contrato que represente 600 monedas, debe enviar 600000000 (600 con 6 0 agregados) o BigNumber.from(600000000) . No estoy seguro de si convertirlo a un tipo BigNumber antes de enviarlo al contrato ahorra gasolina o algo así, porque la conversión está fuera de cadena, pero parece que puede enviar cualquier número al contrato. Solo debe asegurarse de agregar los 0 al final del número de acuerdo con el token con el que está trabajando.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda