no se puede llamar a la función en un contrato desde otro contrato

Estoy tratando de llamar a una función en un contrato desde otro contrato con el siguiente ejemplo simple:

Sin título.sol:

pragma solidity ^0.4.16;

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

Y el segundo contrato:

pragma solidity ^0.4.16;

import "./Untitled.sol";

contract pullother {

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

Al llamar callFunctionInContractOne()en el segundo contrato, la dirección del implementado Untitled.solse proporciona como parámetro, luego returnint()se llama a la función en el primer contrato (que debería devolver 15). Cuando pruebo esto en el editor de remezclas, obtengo lo siguiente en su lugar:

ingrese la descripción de la imagen aquí

Estoy copiando de llamar a una función simple de otro contrato pero obtengo un resultado diferente. También intenté ejecutar una función en un contrato de otro en una cadena de bloques privada de manera similar, pero no tuve éxito.

Agregando un valor de retorno obtengo lo mismo:

ingrese la descripción de la imagen aquí

Respuestas (2)

De hecho, envió un TX que llama a ese método del primer contrato inteligente, que llamó a la función del segundo contrato inteligente. La cuestión es que estás en una cadena de bloques real , me parece Ropsten, y no en la memoria de tu computadora, por lo que no puedes recuperar valores de un contrato como ese. Lo que te devuelve el remix es el recibo de la transacción después de que el bloque se acuña.

Si desea que una ÐApp pueda recuperar valores directamente de un contrato, cree funciones con constant returns. Y tenga en cuenta que pronto esta constante se dividirá en viewy pure.

Debe agregar un valor de retorno para callFunctionInContractOnela función, de la siguiente manera:

contract pullother {

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

}

Probando que todo está bien. El resultado es :

ingrese la descripción de la imagen aquí

Espero que ayude ~

Todavía parece que me encuentro con lo mismo
agregar constantpara callFunctionInContractOnela función, pruébalo.function callFunctionInContractOne (address _address) constant returns (uint) { helloworld contractOne = helloworld(_address); return contractOne.returnint(); }