Ist address.send(1) ein Alias ​​für address.call.value(1).gas(2300)()?

Soweit ich weiß, machen diese beiden Anweisungen genau dasselbe und können im Code austauschbar verwendet werden. Ist ihr Bytecode identisch?

  • Adresse.senden(1)
  • Adresse.Rufwert(1).gas(2300)()

Antworten (2)

address.send(1)ist äquivalent zu address.call.value(1).gas(0)(). Leiten Sie 0 Gas weiter, weil 2300 ein Standard-Gasstipendium ist, die letzte Feinheit .

Solidität :

    case Location::Send:
        _functionCall.expression().accept(*this);
        m_context << u256(0); // do not send gas (there still is the stipend)

Schlange :

    "(send $to $value)",
    "(~call 0 $to $value 0 0 0 0)"
Ich habe gesehen, dass address.gas(0).value(1).call()() irgendwo verwendet wird. Es gibt ein zusätzliches Paar Klammern. Ändert diese Syntax etwas? Oder ist es die dritte Art, genau dasselbe zu tun?
.callmuss nach sein, addresssonst hast du einen Syntaxfehler Member "gas" not found...

Ja, ihre Bytecodes sind identisch:

contract A {
    function(){
        address A = 0x0EF91f087165cfDe0b51F10D8ed69a670A1f89CB;
        A.call.value(1).gas(0)();        
    }
}

contract A {
    function(){
        address A = 0x0EF91f087165cfDe0b51F10D8ed69a670A1f89CB;
        A.send(1);        
    }
}

6060604052603f8060106000396000f360606040523615600a575b603d604051730ef91f087165cfde0b51f10d8ed69a670a1f89cb90819060009060019082818181858883f1505050505050565b00


6060604052603f8060106000396000f360606040523615600a575b603d604051730ef91f087165cfde0b51f10d8ed69a670a1f89cb90819060009060019082818181858883f1505050505050565b00