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

146
Vistas
La función web3.eth.contracts.method await nunca regresa

Estoy trabajando en un proyecto para interactuar con un contrato inteligente en ethereum. Todo funcionaba bien, las transacciones funcionaban correctamente y así sucesivamente... pero me di cuenta de que cuando traté de ejecutar un código después de una función de espera específica, ese código nunca se ejecutó y realmente no sé por qué. Otros métodos de contrato que invoqué funcionan bien y el código se ejecuta normalmente.

El código:

 onSubmit = async (event) => { event.preventDefault() console.log("Submitting the form...") var day = new Date(Date.now()).getDate() var month = new Date(Date.now()).getMonth() + 1 var year = new Date(Date.now()).getFullYear() var today = new Date(year, month -1, 1) var todayTime = today.getTime() const ipfsadded = await ipfs.add({path:this.state.fileName, content:this.state.buffer}) var ipfsHash = ipfsadded.cid.toString() this.setState({ipfsHash: ipfsHash}) console.log('hash:', ipfsHash, " / name =", this.state.fileName ) console.log("inserindo na blockchain..") const accounts = await web3.eth.getAccounts() //ERROR HERE!! //THIS FUNCTION IS EXECUTED, THE TRANSACTION IS CONFIRMED IN METAMASK BUT AFTER THAT NOTHING HAPPENS var result = await contract.methods.add(ipfsHash, this.state.fileName, this.state.fileType, todayTime).send({from:accounts[0], gas:300000}); console.log("resultado =", result) //IS NEVER EXECUTED EVEN WITH TRANSACTION OK console.log("File submitted on blockchain!") //IS NEVER EXECUTED }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Es probable que se deba a que la transacción no se extrajo en 750 segundos y .send arrojó un error, pero no se detectó. Puede probar esto envolviéndolo con un bloque try/catch e inspeccionar el error.

 try { var result = await contract.methods.add(ipfsHash, this.state.fileName, this.state.fileType, todayTime).send({from:accounts[0], gas:300000}); } catch(err) { console.error(err); }

Una mejor manera es suscribirse a un evento de receipt , transactionHash o confirmation , que se expone mediante el send .

 contract.methods.add(ipfsHash, this.state.fileName, this.state.fileType, todayTime) .send({from:accounts[0], gas:300000}) .on('transactionHash', resolve) .on('error', reject);

en tu caso seria

 onSubmit = async (event) => { event.preventDefault() console.log("Submitting the form...") var day = new Date(Date.now()).getDate() var month = new Date(Date.now()).getMonth() + 1 var year = new Date(Date.now()).getFullYear() var today = new Date(year, month -1, 1) var todayTime = today.getTime() const ipfsadded = await ipfs.add({path:this.state.fileName, content:this.state.buffer}) var ipfsHash = ipfsadded.cid.toString() this.setState({ipfsHash: ipfsHash}) console.log('hash:', ipfsHash, " / name =", this.state.fileName ) console.log("inserindo na blockchain..") const accounts = await web3.eth.getAccounts() //ERROR HERE!! //THIS FUNCTION IS EXECUTED, THE TRANSACTION IS CONFIRMED IN METAMASK BUT AFTER THAT NOTHING HAPPENS const promise = new Promise() contract.methods.add(ipfsHash, this.state.fileName, this.state.fileType, todayTime) .send({from:accounts[0], gas:300000}) .on('receipt', (receipt) => { console.log('this should be executed now') console.log("resultado =", receipt) console.log("File submitted on blockchain!") }) .on('error', console.error) }

Cualquiera de estas respuestas https://ethereum.stackexchange.com/a/58936/6814 y https://ethereum.stackexchange.com/a/59114/6814 son correctas.

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