Ich möchte die Rückgabedaten erhalten, die in der Solidity-Funktion in web3js geschrieben sind. Ich verwende das web3.min.js
aus 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.getTransactionReciept
die 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
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
, pure
oder 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.
Aniketh Saha
.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.Rob Hitchens
Aniketh Saha