struct userData{
uint val;
bool isvalue;
string name;
}
mapping(uint => address) internal users;
mapping(address => userData) internal bidirectionalUsers;
function addMember(address newMember, string memberName) public{
if (msg.sender != owner) return;
if (bidirectionalUsers[newMember].isvalue) return;
users[memberCount] = newMember;
bidirectionalUsers[newMember] = userData(memberCount,true,memberName);
}
Der obige Code gibt eine Warnung in addMember(), gas limit is high:infinite and it can not be executed
.
Ich habe alle Zeilen innerhalb der Funktion kommentiert, aber trotzdem wird diese Warnung ausgegeben. Was mache ich hier falsch? Kann mir dabei jemand helfen. Danke dir.
Sie können diese Warnung ignorieren. Das Problem ist Ihre String-Variable in den Parametern string memberName
. Da eine Zeichenfolge keine feste Größe hat, ist es theoretisch möglich, unendlich viel Gas zu benötigen, um sie mit unendlich vielen Zeichen zu füllen.
Ihr Code wird weiterhin kompiliert und funktioniert, wenn keine anderen Fehler angezeigt werden.
Ich erhalte die gleiche Warnung auch bei einer reinen Funktion mit Argumenten fester Länge. Hier ist der Code:
function sumar(int a, int b) public pure returns (int) {
return a+b;
}
Irgendwelche Ideen?
(Mit aktueller Version von Remix, Compiler-Version 0.8.13)
ek
Fabian Iwanecki
require(memberName.length <= 10);