Wie kann ich die von der Solidity-Funktion zurückgegebenen Daten von der Transaktions-ID in web3js abrufen, wenn eine Solidity-Funktion aufgerufen wird?

Ich möchte die Rückgabedaten erhalten, die in der Solidity-Funktion in web3js geschrieben sind. Ich verwende das web3.min.jsaus dem Truffle Pet-Shop-Paket als web3-Bibliothek. Alles funktioniert einwandfrei, wenn die Funktion aufgerufen wird, die die Transaktionsdaten zurückgibt, von denen ich früher web3.eth.getTransactionRecieptdie Details erhalten habe, und das Gas wird auch verwendet. Jetzt möchte ich die Daten, die meine Solidity-Methode zurückgeben

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

Der js-Teil

<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>

Ich erhalte die Daten in der Konsole

Daten: 0x988d4bd3169a4d752f6e4ac230d01840f2f7b4cc8e87d768a8e41b6fe867740d

Ich habe das gemacht, web3.toAscii(this transaction is)aber es kommt kein richtiges Ergebnis, das erwartet wird, da dies kein Hex-Wert ist

Bei Ausgabe vonweb3.eth.getTransactionReciept

blockHash : "0x552a93b0035571b93e4a1a89daa445663b0ddb29974078cdf9a250b7f873ca96" blockNumber : 10 contractAddress : null cumulativeGasUsed : 21899 gasUsed : 21899 logs : [] logsBloom : "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" status : "0x01" transactionHash : "0x988d4bd3169a4d752f6e4ac230d01840f2f7b4cc8e87d768a8e41b6fe867740d"Transaktionsindex: 0

Bitte helfen Sie bei diesem Dankeschön

Antworten (1)

Dies kann als Duplikat markiert sein, also nur um Ihnen zu helfen. Du kannst nicht.

Die Rückgabewerte sind nur für andere Verträge verfügbar. Als Software-Client, der eine Transaktion signiert und sendet, erhalten Sie eine Transaktionsquittung und nachdem Sie darauf gewartet haben, dass die Transaktion abgebaut wird, können Sie die Protokolle oder andere Funktionen auf schreibgeschützter Basis überprüfen (entweder die Vertragsfunktion ist oder view, pureoder Sie rufen es mit der JavaScript- .call()Methode auf), um zu erfahren, was es Neues im Vertragsstatus gibt. Die Rückgabewerte der Zustandsänderungsfunktion sind außerhalb der Reichweite.

Ich hoffe es hilft.

Wie erhalte ich den Mining-Status? Ich habe die .call()Methode "aber es kam undefiniert" gemacht, dann habe ich herausgefunden, dass ich das alte Web3 verwendet habe. Ich habe es aktualisiert und jetzt .call()funktioniert es.
Dies ist mit Truffle gut gelöst, aber es gibt mehr Lernkurve, um sich daran zu gewöhnen. Unter anderem packen sie den Vertrag ABI in eine übergeordnete Abstraktion, die die Syntax aufräumt und solche Details behandelt. Hier finden Sie praktische Ideen. ethereum.stackexchange.com/questions/7709/…
Es ist im Allgemeinen seltsam, weil My UI von den Rückgabedaten abhängt, und wenn in einer bereitgestellten Umgebung niemand da ist, um zu minen, ist es wirklich schwierig, die Dinge zum Laufen zu bringen. es ist ok für die lokale Entwicklung env . Die Dinge sind mir jetzt ganz klar. Danke