Ich möchte den Rückgabewert einer Funktion für einen Soliditätsvertrag erhalten. Ich habe bereitgestellt, indem ich den Solidity-Browser im Testnet verwende. Ich verwende den nodejs-Client und er verwendet geth für den Web3-Anbieter. Hier sind die Details
Vertrag (aus Soliditätsbeispiel)
contract ShapeCalculator{
function rectangle(uint w, uint h) returns (uint s, uint p) {
s = w * h;
p = 2 * (w + h);
}
}
Kundencode ::
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
web3.eth.defaultAccount=web3.eth.accounts[0];
var abi = '[{"constant":false,"inputs":[{"name":"w","type":"uint256"},{"name":"h","type":"uint256"}],"name":"rectangle","outputs":[{"name":"s","type":"uint256"},{"name":"p","type":"uint256"}],"payable":false,"type":"function"}]';
var address = "address which I received after deployment";
var shapeCalculatorContract = web3.eth.contract( JSON.parse(abi)).at(address);
var holdReturnValue = shapeCalculatorContract.rectangle(10,20);
console.log(holdReturnValue);
Auf der Konsole bekomme ich "0x83ddb750b799c62f73013c34f89295e3ff2af5cc98755a51e41e00a13c389735", ich hatte die Fläche und den Umfang erwartet. Schätzen Sie jede Hilfe.
Wenn Sie eine Vertragsfunktion mit ihrem Namen aufrufen, wie Sie es dort getan haben, generieren Sie eine Transaktion, und Sie können den zurückgegebenen Wert außerhalb des Vertrags nicht sehen (was Sie erhalten, ist die Transaktionsquittung). Wenn Ihre Funktion den Zustand in der Blockchain ändern muss, dann sind Transaktionen der richtige Weg, und um Zugriff auf Rückgabewerte zu erhalten, sollten Sie sich mit der Verwendung von Events befassen. Wenn Sie wie in diesem Fall mit Ihrer Funktion keinen Wert in der Blockchain ändern, können Sie stattdessen einen Funktionsaufruf verwenden und die zurückgegebenen Werte direkt in Ihrem Javascript-Code abrufen. In Ihrem Fall wäre das (z. B. mit Versprechen)
shapeCalculatorContract.rectangle.call(10,20).then(function(s,p){
console.log("s=%d, p=%d", s, p);
}); // insert catch error block here
Für ein besseres Verständnis von Transaktionen und Aufrufen und deren Unterschied siehe diese Antwort oder die Dokumentation von web3.
Badr Bellaj
Jay
Daniel Luca CleanUnicorn
mirg
ivicaa