Funktion in einem Vertrag kann nicht von einem anderen Vertrag aufgerufen werden

Ich versuche, eine Funktion in einem Vertrag aus einem anderen Vertrag mit dem folgenden einfachen Beispiel aufzurufen:

Ohne Titel.sol:

pragma solidity ^0.4.16;

contract helloworld {
function returnint() returns (uint) {
return 15;
}
}

Und der zweite Vertrag:

pragma solidity ^0.4.16;

import "./Untitled.sol";

contract pullother {

function callFunctionInContractOne (address _address) returns (uint) {
    helloworld contractOne = helloworld(_address);
    contractOne.returnint();
}
}

Beim Aufruf callFunctionInContractOne()des zweiten Vertrags wird die Adresse des Deployed Untitled.solals Parameter angegeben, dann returnint()wird die Funktion im ersten Vertrag aufgerufen (die 15 zurückgeben sollte). Wenn ich das im Remix-Editor versuche, bekomme ich stattdessen Folgendes zurück:

Geben Sie hier die Bildbeschreibung ein

Ich kopiere vom Aufrufen einer einfachen Funktion aus einem anderen Vertrag, erhalte aber ein anderes Ergebnis. Ich habe auch versucht, eine Funktion für einen Vertrag von einem anderen auf einer privaten Blockchain auf ähnliche Weise auszuführen, bin aber erfolglos.

Wenn ich einen Rückgabewert hinzufüge, bekomme ich dasselbe:

Geben Sie hier die Bildbeschreibung ein

Antworten (2)

Sie haben tatsächlich einen TX gesendet, der diese Methode des ersten Smart Contracts aufruft, die die Funktion des zweiten Smart Contracts aufruft. Die Sache ist, dass Sie sich auf einer echten Blockchain befinden – es scheint mir Ropsten – und nicht im Speicher Ihres Computers, sodass Sie keine Werte aus einem solchen Vertrag abrufen können. Was der Remix Ihnen zurückgibt, ist die Transaktionsquittung, nachdem der Block geprägt ist.

Wenn Sie möchten, dass eine ÐApp Werte direkt aus einem Vertrag abrufen kann, erstellen Sie Funktionen mit constant returns. viewUnd bitte beachten Sie, dass diese Konstante bald in und aufgeteilt wird pure.

callFunctionInContractOneSie sollten wie folgt einen Rückgabewert für die Funktion hinzufügen :

contract pullother {

    function callFunctionInContractOne (address _address) returns (uint) {
        helloworld contractOne = helloworld(_address);
        return contractOne.returnint();
    }

}

Testen ob alles ok ist. Das Ergebnis ist :

Geben Sie hier die Bildbeschreibung ein

Hoffe es hilft~

Ich scheine immer noch auf dasselbe zu stoßen
constantfür Funktion hinzufügen callFunctionInContractOne, versuchen Sie es.function callFunctionInContractOne (address _address) constant returns (uint) { helloworld contractOne = helloworld(_address); return contractOne.returnint(); }