Creé un contrato que almacena la dirección de los usuarios y quiero enviar 1 éter a todos los usuarios almacenados en la matriz.
Aquí está mi código
contract project{
address public user;
bytes32[10] name;
address[10] customer;
uint public i=0;
function project(){
user=msg.sender;
}
function add(bytes32 _name){
name[i]=_name;
customer[i]=msg.sender;
i++;
}
function get_address() constant returns(address[10]){
return customer;
}
function reward() {
for(uint i=0;i<10;i++)
{
customer[i].send(1);
}
}
}
Cuando llamo al método de recompensa, metamask ejecutó la transacción pero el éter no se transfirió.
Por favor, ayúdame.
Está tratando de hacer que el contrato envíe fondos que no tiene. Necesita éter para extraer. El saldo comenzaría en 0, por lo que debe agregar un function() payable{}
y enviar algo de éter para trabajar.
He marcado una sección del código *** unsafe ***
para evitar malentendidos. Hay preocupaciones más profundas sobre el manejo del dinero de esta manera. Un buen siguiente paso es verificar el éxito/fallo de la send()
operación y luego responder de manera diferente. Lo tengo emitiendo un mensaje de falla o un mensaje de éxito.
Agregué algunos emisores de eventos para que puedas ver lo que está pasando.
Espero eso ayude.
contract project{
address public user;
bytes32[10] name;
address[10] customer;
uint public i=0;
event LogDep (address sender, uint amount, uint balance);
event LogSent(address recipient, uint amount, uint balance);
event LogErr (address recipient, uint amount, uint balance);
function project(){
user=msg.sender;
}
function depositFunds() public payable returns(bool success) {
LogDep(msg.sender, msg.value, this.balance);
return true;
}
function add(bytes32 _name){
name[i]=_name;
customer[i]=msg.sender;
i++;
}
function get_address() constant returns(address[10]){
return customer;
}
function reward() {
for(uint i=0;i<10;i++)
{
// *** unsafe pattern ***
if(customer[i].send(1)) {
LogSent(customer[i], 1, this.balance);
} else {
LogErr(customer[i], 1, this.balance);
}
}
}
}
Aquí está en Remix para mostrar su funcionamiento.
Si no ha visto Remix antes, vaya aquí https://ethereum.github.io/browser-solidity y simplemente pegue el código en el compilador. Puede interactuar con las funciones del contrato.
Paso 1: Crear el contrato
Paso 2: envíe el contrato algunos fondos
10 wei es suficiente para enviar 1 a los 10 clientes. Si envía menos, comenzará a ver envíos fallidos en el Paso 3.
Paso 3: envía txn a la recompensa ()
Asegúrese de NO enviar wei/eth esta vez, porque esta función no es de pago.
Anurag Verma
Rob Hitchens
Rob Hitchens
Anurag Verma
Rob Hitchens
Rob Hitchens
Anurag Verma