solidity send ether funktioniert nicht

Ich versuche, diesen Beispielcode zu testen:

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;
}

Sehr einfach, senden Sie einfach 1 Ether an eine bestimmte Adresse und senden Sie dann den Adresssaldo zurück. Ich bekomme jedoch immer 0 als Ausgabe, was bedeutet, dass das Senden fehlgeschlagen ist:

Geben Sie hier die Bildbeschreibung ein

Was ist los mit dir?

Sie sollten vorher etwas Ether an Smart Contract senden oder foo mit etwas Ethereum anrufen. Auf dem Bildschirm oben sehe ich den Wert 0 wei. Wie können Sie Ether senden, wenn es welche auf einem Smart-Vertragskonto gibt?
Es ist nicht 0, es war 100 Ether, es gab einen Fehler mit JS VM, es wurde mit 100 Ether initialisiert, nachdem ich mehrmals auf foo geklickt habe, wird es eine sehr kleine Zahl nahe 0

Antworten (1)

Was fehlt, ist der zahlbare Modifikator.

Ich habe dieses Stück Code getestet:

contract MyContract {

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

Ich habe es bereitgestellt und dann mit Wert auf 2 ausgeführt (bedeutet 2 Ether) und es funktioniert. Hier ist die Ausgabe:Geben Sie hier die Bildbeschreibung ein

Die Ausgabe ist 1 ETH in Wei.

Danke Lukasz, es funktioniert! Was bedeutet hier der auf 1 gesetzte Wert?
Ich habe meine Antwort bearbeitet. Der Wert wurde auf 2 gesetzt, was bedeutet, dass ich 2 Ether sende (von meinem Konto an meine Smart-Contract-Adresse). Das Hauptproblem hier war das Fehlen eines zahlbaren Modifikators.