Подтвердить что ты не робот

Членский тип недоступен в типе (библиотека Assert)

Проблема возникает, когда я хочу проверить правильность строкового значения. Числа утверждаются правильно и не возвращают сообщение об ошибке, когда они пытаются скомпилировать. Однако, когда я пытаюсь утверждать строку, она возвращает следующее сообщение об ошибке:

Error: Member "equal" is not available in type(library Assert) outside of storage.
        Assert.equal(token.symbol(), "$", "The symbol of the token should be $");
        ^----------^
Compiliation failed. See above.

Token.sol

pragma solidity ^0.4.8;

contract Token {
    /* The amount of tokens a person will get for 1 ETH */
    uint256 public exchangeRate;

    /* The name of the token */
    string public name;

    /* The address which controls the token */
    address public owner;

    /* The symbol of the token */
    string public symbol;

    /* The balances of all registered addresses */
    mapping (address => uint256) balances;

    /* Token constructor */
    function Token(uint256 _exchangeRate, string _name, string _symbol) {
        exchangeRate = _exchangeRate;
        name = _name;
        owner = msg.sender;
        symbol = _symbol;
    }

    function getBalance(address account) returns (uint256 balance) {
        return balances[account];
    }
}

TestToken.sol

pragma solidity ^0.4.8;

// Framework libraries
import "truffle/Assert.sol";
import "truffle/DeployedAddresses.sol";

// Custom libraries and contracts
import "../contracts/Token.sol";

contract TestToken {
    function testExchangeRate() {
        Token token = new Token(500, "Dollar", "$");

        uint256 expected = 500;

        Assert.equal(token.exchangeRate(), expected, "The exchange rate should be 500 tokens for 1 ETH");
    }

    function testSymbol() {
        Token token = new Token(500, "Dollar", "$");

        Assert.equal(token.symbol(), "$", "The symbol of the token should be $");
    }
}

Почему это происходит и как вы его решаете?

4b9b3361

Ответ 1

На данный момент прочность не поддерживает возвратные строки между контрактами. Поскольку длина строки неизвестна во время вызова. Поэтому они поддерживают только фиксированные размеры arryas, такие как bytes32.

У вас может быть несколько байтов32 для хранения разных частей вашей строки.

Ответ 2

Попробуйте изменить тип с string на другой, скажем, bytes32. Он работает.

Все самое лучшее.