2017-03-14 21 views
12

Problem pojawia się, gdy chcę sprawdzić, czy wartość ciągu jest poprawna. Numery są poprawne i nie zwracają komunikatu o błędzie podczas próby kompilacji. Jednak, gdy staram się dochodzić ciąg, zwraca się następujący komunikat o błędzie:Element equal jest niedostępny w typie (biblioteka 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 $"); 
    } 
} 

dlaczego to się zdarza i jak to rozwiązujesz?

+0

Może to może pomóc? http://ethereum.stackexchange.com/q/1701 – default

+2

Wszelkie wiadomości na ten temat? –

Odpowiedz

-3

Spróbuj zmienić typ z string na inny, powiedzmy, bytes32. To działa.

Wszystkiego najlepszego.

1

Obecnie solidność nie obsługuje zwracania ciągów między kontraktami. Ponieważ długość struny nie jest znana w czasie połączenia. Obsługują one tylko ariony o stałym rozmiarze, takie jak bytes32.

Możesz mieć wiele bajtów32 do przechowywania różnych części twojego ciągu.