¿Es posible quedarse sin gasolina en un método antes de llegar a la llamada de autodestrucción?

Me gustaría implementar un método de autodestrucción para un contrato inteligente que reúna el dinero de las personas como último recurso.

Antes de llamar a la autodestrucción, me gustaría reembolsar todo el dinero a los usuarios y enviar lo que quede a la dirección del propietario.

Estoy pensando en algo a lo largo de las líneas de

uint256 usersLength = users.length;
for (var i = 0; i < usersLength; i++ ) {
    address user = users[i];
    uint256 refundAmount = pooledMoney[user];
    user.transfer(refundAmount);
)
selfdestruct(owner);

Estoy un poco preocupado por lo que sucedería si el tamaño de la usersmatriz es muy grande, ¿se quedará sin combustible el método dentro del circuito?

Si es así, ¿cuáles son las soluciones alternativas para implementar algo como esto?

Respuestas (1)

Sí, la transacción se quedará sin gas si la matriz de usuarios es demasiado grande.

La alternativa es que cada usuario recupere su parte de la reserva.

function withdraw() public {
    uint refundAmount = pooledMoney[msg.sender];
    if (refundAmount > 0) {
        pooledMoney[msg.sender] = 0;
        msg.sender.transfer(refundAmount);
        emit Refunded(msg.sender, refundAmount);
    }
}

Después de que todos los usuarios hayan retirado su éter, el propietario puede destruir el contrato.

¡Gracias por responder! Me preguntaba si había una forma eficiente de hacer esto en nombre de los usuarios, pero supongo que no hay...