Ich habe einen Wallet-Vertrag abgeschlossen, um alle Token zu speichern, die ein Konto besitzt.
Es gibt ein mapping(address=>TokenInfo[])
, und address
bezieht sich auf das Konto, TokenInfo[] gespeicherte Token, die dieses Konto hält. TokenInfo ist ein Array von TokenInfo-Strukturen, in denen token
die Token-Adresse steht, exist
dh ob das Token dem Array hinzugefügt wurde.
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;
}
}
Aber wenn ich addToken()
die Funktion aufrufe, hat es nicht funktioniert. Es scheint, dass es nie in die Schleife eingetreten ist.
Der Standardwert in einer Zuordnung für ein Array ist ein leeres Array.
In Ihrem Fall bedeutet dies tokenList[_account].length
gleich 0.
Und die Schleife wird nie betreten, weil die Bedingung falsch i < tokenList[_account].length
wird .0 < 0