solidity send ether no funciona

Estoy tratando de probar este código de muestra:

contract MyContract {


function foo(address a) returns (uint) {

    // send ether with default 21,000 gas
    // likely causes OOG in callee
    a.send(1 ether);

    // send ether with all remaining gas
    // but no success check!
    a.call.value(1 ether)();

    // RECOMMENDED
    // send all remaining gas
    // explicitly handle callee throw
    if(a.call.value(1 ether)()) throw;
    return a.balance;
}

Muy simple, solo envíe 1 éter a una dirección específica, luego devuelva el saldo de la dirección, sin embargo, siempre obtengo 0 como salida, lo que significa que el envío falló:

ingrese la descripción de la imagen aquí

¿qué ocurre?

Debería enviar algo de éter a un contrato inteligente antes o llamar a foo con algo de Ethereum. En la pantalla de arriba veo el valor 0 wei. ¿Cómo puede enviar Ether si hay alguno en la cuenta del contrato inteligente?
no es 0, era 100 ether, hubo un error con JS VM, se inicializó para ser 100 ether, después de hacer clic en foo varias veces, se convierte en un número muy pequeño cercano a 0

Respuestas (1)

Lo que falta es el modificador pagadero .

Probé esta pieza de código:

contract MyContract {

function foo(address a) payable returns (uint) {
   a.call.value(1 ether)();
   return a.balance;
 }
}

Lo implementé y luego ejecuté con Value establecido en 2 (es decir, 2 Ether) y funciona. Aquí está la salida:ingrese la descripción de la imagen aquí

La salida es 1 ETH en Wei.

Gracias Lukasz, funciona! ¿Qué significa el valor establecido en 1 aquí?
Edité mi respuesta. El valor se estableció en 2, significa enviar 2 Ether (desde mi cuenta a la dirección de mi contrato inteligente). El problema principal aquí fue la falta de un modificador pagadero.