Estoy tratando de leer un archivo JSON como accesorio estático para inicializar un método para el proyecto. Pero el problema es que recibo un error cuando intento llamar a la función que llama al método que lee el archivo JSON.
Esto es de la función componente.
import Web3 from "web3" import fs from 'fs' import buildData from '../../build/contracts/Betting.json' // export local copies of contracts export const getStaticProps = async () => { const data = JSON.stringify(await buildData.abi); return { props: {data,}, } } const provider = new Web3.providers.HttpProvider( process.env.NEXT_PUBLIC_RINKEBY_RPC_URL ) const web3 = new Web3(provider) const abi = await getStaticProps() const bettingContract = async (web3) => { return new web3.eth.Contract( await abi, "0x65b01f0f4Ec1885bD00D8C6dC8027fcc1316BCC4" ) } export default bettingContractEn mi gancho useEffect que lo llama (EDITADO):
useEffect( () => { const getPrizeMoneyHandler = async () => { const prizeMoney = await bettingContract.methods.getPrizeMoney().call() setPrizeMoney(prizeMoney) } getPrizeMoneyHandler() return () => { // this now gets called when the component unmounts }; })me sale el error:
Unhandled Runtime Error TypeError: _blockchain_resplendent_contract_export__WEBPACK_IMPORTED_MODULE_5__.default.methods is undefinedEsto es específicamente cuando trato de ejecutar getPrizeMoneyHandler() en el enlace useEffect en el archivo principal de la aplicación. Sé que puedo recuperar los datos abi JSON dentro del primer bloque de código. Pero admito que no sé si llega a tiempo antes de exportar bettingContract. Voy a suponer que mi problema es no poder llamar a la promesa correctamente en el gancho useEffect.
¿Qué estoy haciendo mal?
EDITAR: investigué un poco más mi problema y modifiqué el gancho de uso de efectos para que sea el anterior y todavía tengo el error, así que no creo que sea un problema de promesa, sino algo con la función del primer componente en la parte superior, contrato de apuestas. ¿Alguna idea sobre cómo depurar esto?