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

215
Vistas
Valor de retorno de la función de contrato inteligente

En un proyecto de trufas, tengo una función de contrato inteligente como se muestra a continuación:

 function add_something(string memory _firstName, string memory _lastName) external returns (address) { // Do some updates etc return someAddress; }

Después de implementar el contrato inteligente con el comando de truffle migrate de truffle, quiero ejecutar un script JS para llamar a algunas funciones en el contrato inteligente implementado. ( truffle exec add.js )

 const MyContract = artifacts.require("MyContract"); module.exports = async function(callback) { let accounts = await web3.eth.getAccounts(); let instance = await MyContract.deployed(); let result = await instance.add_something("Stack", "Overflow", {from: accounts[0]}); console.log(result);

Esperado : quiero tener el valor de retorno (dirección) en el resultado.

Real : el resultado contiene el siguiente objeto de recibo de transacción:

 {"tx":"0x2e5b2fb1a9dd023be04e12f73fcea3cab84214258be71ac2f76b86c58e485433","receipt":{"transactionHash":"0x2e5b2fb1a9dd023be04e12f73fcea3cab84214258be71ac2f76b86c58e485433","transactionIndex":0,"blockHash":"0xbdbef8e9b38cd66748eca51809869185deb61d00bb0f93916f76ee5594ca945d","blockNumber":45,"from":"0x75c1df3c54b6eb371169737fb62f2c5b7c178479","to":"0x786676da2567c51c83b56888e48030fa5fea0e03","gasUsed":2406988,"cumulativeGasUsed":2406988,"contractAddress":null,"logs":[],"status":true,"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","rawLogs":[]},"logs":[]}

Intenté usar .methods, call() y send(), pero obtuve los siguientes errores:

 let result = await instance.add_something("Stack", "Overflow", {from: accounts[0]}).call(); TypeError: instance.add_something(...).call is not a function

Sugiera una solución adecuada para leer el valor de retorno de una función de contrato inteligente sin visualización.

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

0

Si entendí tu pregunta correctamente, deberías considerar usar eventos. En circunstancias normales, las funciones de solidez no devuelven un valor para empezar, pero los eventos pueden cambiar eso.

 contract Test { event someEvent(string _someString); function doSomething()public external { emit someEvent("This is some event"); } }

También puedes pasar una variable como esta

 function doSomething(string _somethingGoesHere)public external { emit someEvent(_somethingGoesHere); }

Luego puede ir al código JavaScript y leer el resultado o más bien la salida así

 var abi = /* abi as generated using compiler */; var Test = web3.eth.contract(abi); /* Deploy your contract and save the address*/ var testContract = Test.at("0x1234...ab67" /* address */); var event = testContract.doSomething(function(error, result) { if (!error)console.log(result); });

Esto fue que no necesita usar ningún valor de retorno o una función de vista, en su lugar, simplemente lee lo que se devuelve o más bien se emite desde el evento Solidity

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