Ist es möglich, dass in einer Methode das Gas ausgeht, bevor der Selbstzerstörungsruf erreicht wird?

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 usersArrays sehr groß ist. Wird der Methode innerhalb der Schleife das Gas ausgehen?

Wenn ja, was sind alternative Lösungen, um so etwas zu implementieren?

Antworten (1)

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.

Danke für die Antwort! Ich habe mich gefragt, ob es eine effiziente Möglichkeit gibt, dies im Namen der Benutzer zu tun, aber ich denke, es gibt keine ...