VM вне Gas Exception пытается вызвать функцию, принадлежащую другому контракту - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь вызвать функцию из другого контракта, но продолжаю работать на ВМ из-за отсутствия газа.

Я использую IDE, предложенную Oraclize, для тестирования следующего кода.

pragma solidity ^0.4.22;

contract ContractA {
    ContractB contractB;

    constructor() public {
        contractB = new ContractB();
    }

    function saySomething() external returns(string) {
        return contractB.retunsAString();
    }
}

contract ContractB {
    function retunsAString() public pure returns(string) {
        return "Hello to you all!";
    }
}

Если я пытаюсь сделать функцию saySomething () видом, эта ошибка возникает при компиляции.

Я попытался выполнить поиск, прежде чем спрашивать, но не смог найти сообщение, объясняющее это (по крайней мере, не так, как я)понять).

Почему это происходит, и есть ли способ решить эту проблему, чтобы код выполнялся, как я ожидал?

1 Ответ

0 голосов
/ 06 декабря 2018

Ваш код в порядке (просто добавьте view в функцию saySomething).Итак, сначала перейдите в официальную IDE из Ethereum - http://remix.ethereum.org.

Вверху справа перейдите на вкладку Run, затем выберите: environment - JavaScript VM (если у вас есть метамаска - внедренная web3).Вставьте этот код и нажмите deploy

pragma solidity ^0.5.1;

contract ContractA {
    ContractB contractB;

    constructor() public {
        contractB = new ContractB();
    }

    function saySomething() external view returns(string memory) {
        return contractB.retunsAString();
    }
}

contract ContractB {
    function retunsAString() public pure returns(string memory) {
        return "Hello to you all!";
    }
}
...