Я заключил контракт с кошельком для хранения всех токенов, которыми владеет аккаунт.
Существует 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()
функцию, это не сработало. Кажется, он никогда не входил в цикл.
Значение по умолчанию в сопоставлении для массива — пустой массив.
В вашем случае это означает tokenList[_account].length
0.
И цикл никогда не будет введен, потому что условие i < tokenList[_account].length
становится 0 < 0
ложным.