Das Yellow Paper Anhang H definiert die CREATE- und CALL-Opcodes. Für ANRUF:
Die Reihenfolge der Operanden ist: gas, to, value, in offset, in size, out offset, out size.
Kann der CALL-Opcode zum Erstellen eines Vertrags verwendet werden, indem der zweite Operand (das "to") auf Null gesetzt wird?
Wenn das möglich ist, was wären die Unterschiede zwischen der Verwendung von CREATE und CALL? Gibt es Fälle, in denen es besser wäre (z. B. billigeres Gas), den CALL-Opcode zum Erstellen eines Vertrags zu verwenden?
CALL
Kann der Opcode zum Erstellen eines Vertrags verwendet werden, indem der zweite Operand (das "to") auf Null gesetzt wird?
Nein, ich kann nicht. Die Nulladresse ist nichts Besonderes. Genau wie jedes andere Nicht-Vertragskonto muss es keinen Code ausführen, wenn es eine Nachricht über den CALL
Opcode erhält.
Eine andere intuitive Möglichkeit, darüber nachzudenken, ist, dass jeder Opcode seine eigenen Gaskosten hat, also wäre dies ein lustiger Hack, um die Kosten einer CREATE
Operation zu vermeiden.
Ich bin noch neu darin, aber ich verstehe, dass es nicht möglich ist. Der Aufruf ist nur zu verwenden, wenn die Anfrage den Zustand der Blockchain nicht ändert (normalerweise nur das Lesen von Feldern oder das Aufrufen konstant markierter Funktionen.
Das Erstellen einer neuen Vertragsinstanz ändert offensichtlich die Blockchain-Daten, da sie in den Block integriert werden müssen, bevor die Adresse zurückgegeben werden kann.
In meinen Experimenten (bisher) verwende ich nur die folgenden Muster und es ist ausreichend:
All dies wird (in synthetischer Form) in der API https://github.com/ethereum/wiki/wiki/JavaScript-API erklärt
eth