Solidity 0.5.0: TypeError Начальное значение для постоянной переменной должно быть постоянной времени компиляции - PullRequest
0 голосов
/ 09 января 2019

Почему я не могу объявить константу таким образом в Solidity 0.5.0? С последними версиями все прошло нормально:

uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals()));

/**
 * @return the number of decimals of the token.
 */
function decimals() public view returns (uint8) {
    return _decimals;
}

1 Ответ

0 голосов
/ 09 января 2019

В Solidity константы нигде не хранятся в хранилище; они подставляются в байт-код. Примерно как то так:

constant uint256 FOO = 42;

function blah() {
    return FOO;
}

Превращается в это:

function blah() {
    return 42;
}

Компилятор может выполнить эту замену, только если значение константы известно во время компиляции . В вашем примере, если _decimals является константой, для компилятора теоретически возможно выяснить, что decimals() возвращает константу и каково это значение, но компилятор Solidity далеко не такой умный.

...