какова длина массива структур?

Я заключил контракт с кошельком для хранения всех токенов, которыми владеет аккаунт.

Существует mapping(address=>TokenInfo[])и addressотносится к учетной записи, TokenInfo[] хранит токены, которые хранятся в этой учетной записи. TokenInfo представляет собой массив структуры TokenInfo, в которой tokenнаходится адрес токена, existозначает, был ли токен добавлен в массив.

contract Wallet {
    struct TokenInfo {
        IERC20Token token;
        uint exist;//0 means unregistered
    }

    mapping(address=>TokenInfo[]) public tokenList;

    function Wallet() {

    }

    function addToken(address _account, IERC20Token _token) public {
        for (uint i = 0; i < tokenList[_account].length; i++) {//seems didn't enter the loop
            if (tokenList[_account][i].exist == 0) {
                var tokenInfo = TokenInfo(_token, 1);
                tokenList[_account].push(tokenInfo);
            }
        }
    }

    function getTokenListLength(address _account) public constant returns (uint) {
        return tokenList[_account].length;
    }
}

Но когда я вызываю addToken()функцию, это не сработало. Кажется, он никогда не входил в цикл.

Ответы (1)

Значение по умолчанию в сопоставлении для массива — пустой массив.

В вашем случае это означает tokenList[_account].length0.

И цикл никогда не будет введен, потому что условие i < tokenList[_account].lengthстановится 0 < 0ложным.