нельзя вызывать функцию в одном контракте из другого контракта

Я пытаюсь вызвать функцию в одном контракте из другого контракта со следующим простым примером:

Без названия.sol:

pragma solidity ^0.4.16;

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

И второй контракт:

pragma solidity ^0.4.16;

import "./Untitled.sol";

contract pullother {

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

При вызове во втором контракте в качестве параметра задается callFunctionInContractOne()адрес деплоя , затем вызывается функция в первом контракте (которая должна вернуть 15). Когда я пробую это в редакторе ремиксов, вместо этого я получаю следующее:Untitled.solreturnint()

введите описание изображения здесь

Я копирую вызов простой функции из другого контракта , но получаю другой результат. Я также пытался аналогичным образом запустить функцию одного контракта из другого в частном блокчейне, но безуспешно.

Добавляя возвращаемое значение, я получаю то же самое:

введите описание изображения здесь

Ответы (2)

Фактически вы отправили TX, который вызывает метод первого смарт-контракта, вызывающий функцию второго смарт-контракта. Дело в том, что вы находитесь в реальном блокчейне — мне кажется, это Ropsten — а не в памяти вашего компьютера, поэтому вы не можете получить значения из такого контракта. То, что вам возвращает ремикс, — это квитанция о транзакции после того, как блок отчеканен.

Если вы хотите, чтобы приложение ÐApp могло извлекать значения непосредственно из контракта, создайте функции с расширением constant returns. Обратите внимание, что скоро эта константа будет разделена на viewи pure.

Вы должны добавить возвращаемое значение для callFunctionInContractOneфункции следующим образом:

contract pullother {

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

}

Проверяем, что все в порядке. Результат:

введите описание изображения здесь

Надеюсь поможет~

Я все еще, кажется, сталкиваюсь с тем же самым
добавьте constantдля callFunctionInContractOneфункции, попробуйте.function callFunctionInContractOne (address _address) constant returns (uint) { helloworld contractOne = helloworld(_address); return contractOne.returnint(); }