function approveUsers(address[] users) onlyOwner {
for(uint i=0; i<users.length; i++) {
approvedUsers[users[i]] = true; //Mapping {address: bool}
ApproveUserForPreSale(users[i], approvedUsers[users[i]]); //Event
}
}
Obtengo una matriz de longitud cero con este fragmento. Y si tomo a los usuarios como una matriz estática (dirección [10] usuarios), obtengo la longitud correcta pero el contenido es 0 (0x0...).
editar Esto funciona en Remix Studio como se esperaba, pero no en Ethereum Wallet.
Hay un puñado de cosas que suceden aquí.
El problema principal
Tu función no devuelve nada. Parece que se establece un poco en un mapping
cierto y esperaría que probablemente funcione en la medida de lo posible.
** Otro problema #1 **
El uso de una matriz dinámica en la firma de una función significa que esta función no podrá comunicarse con otros contratos, en este momento. Considere un enfoque de firma de longitud fija, por ejemplo, ``` función apruebaUsuario(dirección del usuario) soloPropietario devuelve(bool éxito) { usuariosAprobados[usuario] = verdadero; // evento ... devuelve verdadero; }
** Otro problema #2 **
for i<0; i<unlimited ...
es un antipatrón que dejará de funcionar cuando el costo del gas exceda el gasLimit del bloque. El enfoque de longitud fija que trata con un usuario a la vez resolverá esto.
Los patrones aquí pueden ahorrarle algo de tiempo: ¿ Existen patrones de almacenamiento sencillos y bien resueltos para Solidity?
Espero eso ayude.
ismael
approveUsers
? ¿Es de javascript o de otro contrato de solidez?Devashish Puri