Ich möchte eine Selbstzerstörungsmethode für einen intelligenten Vertrag implementieren, der als letztes Mittel Geld von Menschen bündelt.
Bevor ich Self-Destruct anrufe, möchte ich den Benutzern das gesamte Geld zurückerstatten und den Rest an die Adresse des Eigentümers senden.
Ich denke an etwas in der Art von
uint256 usersLength = users.length;
for (var i = 0; i < usersLength; i++ ) {
address user = users[i];
uint256 refundAmount = pooledMoney[user];
user.transfer(refundAmount);
)
selfdestruct(owner);
Ich mache mir ein wenig Sorgen, was passieren würde, wenn die Größe des users
Arrays sehr groß ist. Wird der Methode innerhalb der Schleife das Gas ausgehen?
Wenn ja, was sind alternative Lösungen, um so etwas zu implementieren?
Ja, der Transaktion wird das Gas ausgehen, wenn die Anzahl der Benutzer zu groß ist.
Die Alternative besteht darin, dass jeder Benutzer seinen Teil des Pools abruft.
function withdraw() public {
uint refundAmount = pooledMoney[msg.sender];
if (refundAmount > 0) {
pooledMoney[msg.sender] = 0;
msg.sender.transfer(refundAmount);
emit Refunded(msg.sender, refundAmount);
}
}
Nachdem alle Benutzer ihren Ether abgehoben haben, kann der Eigentümer den Vertrag zerstören.
Kryptoninja