¿Cómo puedo obtener los datos devueltos por la función de solidez de la identificación de la transacción en web3js cuando se llama a una función de solidez?

Quiero obtener los datos de retorno escritos en la función de solidez en web3js. Estoy usando el web3.min.jspaquete de la tienda de mascotas de trufas como la biblioteca web3. Todo funciona bien cuando se llama a la función, devuelve los datos de transacción de los que solía web3.eth.getTransactionRecieptobtener los detalles y también se usa el gas. Ahora quiero los datos que devuelven mi método de solidez.

 function helloworld() public returns (string) {
        return "helloworld";
    }

la parte js

<script>

    if (typeof web3 !== 'undefined') {
    web3 = new Web3(web3.currentProvider);
    } else {
    web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:7545"));
    }
    web3.eth.defaultAccount = web3.eth.accounts[0];
    console.log('web3.eth.accounts :', web3.eth.accounts);
    var walletContractJSONabiGlobal;
    $.getJSON('./contracts/Wallet.json',async function(walletContractJSONabi) {
        walletContractJSONabiGlobal = walletContractJSONabi;
        var walletContract = web3.eth.contract(walletContractJSONabi.abi);
        var walletInstance = walletContract.at('0xc74c8d941494495a4f65c42bebc556398e1f028d');
        walletInstance.helloworld((err,data)=>{
            if (err) {
                console.log('err :', err);
            } else {
                console.log('data :', data);
            }
        })

    })

</script>

Obtengo los datos en la consola.

datos: 0x988d4bd3169a4d752f6e4ac230d01840f2f7b4cc8e87d768a8e41b6fe867740d

Hice el web3.toAscii(this transaction is)pero no está obteniendo el resultado adecuado que se esperaba ya que este no es un valor hexadecimal

Cuando la salida deweb3.eth.getTransactionReciept

blockHash : "0x552a93b0035571b93e4a1a89daa445663b0ddb29974078cdf9a250b7f873ca96" blockNumber : 10 contractAddress : null cumulativeGasUsed : 21899 gasUsed : 21899 logs : [] logsBloom : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" status : "0x01" transactionHash : "0x988d4bd3169a4d752f6e4ac230d01840f2f7b4cc8e87d768a8e41b6fe867740d"índice de transacción: 0

por favor ayuda en esto gracias

Respuestas (1)

Esto puede estar marcado como duplicado, solo para ayudarte. no puedes

Los valores de retorno solo están disponibles para otros contratos. Como cliente de software que firma y envía una transacción, obtiene un recibo de transacción y luego, después de esperar a que se extraiga la transacción, puede inspeccionar los registros o inspeccionar otras funciones en modo de solo lectura (ya sea que la función de contrato sea o view, pureo lo invoca con el .call()método JavaScript) para descubrir qué hay de nuevo en el estado del contrato. Los valores de retorno de la función de cambio de estado están fuera de alcance.

Espero eso ayude.

¿Cómo obtener el estado minado? Hice el .call()método pero venía indefinido, luego descubrí que estaba usando el antiguo web3, lo actualicé y ahora está .call()funcionando.
Esto se resuelve muy bien con Truffle, pero hay más curva de aprendizaje para acostumbrarse. Entre otras cosas, envuelven el contrato ABI en una abstracción de alto nivel que limpia la sintaxis y se ocupa de detalles como este. Eche un vistazo aquí para obtener ideas prácticas. ethereum.stackexchange.com/questions/7709/…
En general, es extraño porque Mi interfaz de usuario depende de los datos de retorno y, si en un entorno implementado, no hay nadie allí para minar, entonces es realmente difícil hacer que todo funcione. está bien para el desarrollo local env. Las cosas están bastante claras para mí ahora. Gracias