Verarbeitet die EVM Transaktionen oder wird sie ausschließlich zur Ausführung von Vertragscode verwendet?

Verarbeitet die EVM Transaktionen oder wird sie ausschließlich zur Ausführung von Vertragscode verwendet?

Ich frage mich, ob die EVM zur Verarbeitung von Transaktionen verwendet wird? Ich weiß, dass es verwendet wird, um den Bytecode von Verträgen auszuführen (oder zu interpretieren), aber wird es auch bei Transaktionen aufgerufen, um Gelder zwischen Konten zu transferieren oder eine Nachricht an einen Vertrag zu senden?

Antworten (2)

Wie Sie hier lesen können :

Die virtuelle Maschine von Ethereum ist die Engine, in der Transaktionscode ausgeführt wird, und ist das zentrale Unterscheidungsmerkmal zwischen Ethereum und anderen Systemen.

Ist Transaktionscode ein anderer Begriff für „Vertragscode“?
Nein, der Transaktionscode würde sich auf den dataWert beziehen, der optional in einer Transaktion enthalten ist. Diese Daten werden vom Code des empfangenden Vertrags verarbeitet.
Jede Transaktion hat einen scriptAbschnitt, auch bekannt als. codeAbschnitt. Im Fall von Ethereum wird dies codevon der ausgeführt Ethereum Virtual Machine - EVM. Dieser codeAbschnitt ist ein Bytearray, das OP codessich als kompiliertes Programm aus einem möglichst mit geschriebenem Quellcode darstellen lässt Solidity.

Ich frage mich, ob die EVM zur Verarbeitung von Transaktionen verwendet wird? Ich weiß, dass es verwendet wird, um den Bytecode von Verträgen auszuführen (oder zu interpretieren), aber wird es auch bei Transaktionen zum Transferieren von Geldern zwischen Konten aufgerufen ...

Nur wenn die Transaktion an eine Vertragsadresse gesendet wird. In diesem Fall wird der Bytecode geladen, und die EVM interpretiert die Anweisungen.

... oder eine Nachricht zu einem Vertrag senden?

Ja. Angenommen, Sie meinen einen Nachrichtenanruf , den das gelbe Papier definiert als:

Message Call: The act of passing a message from one Account to another.

In diesem Fall wird dies von der EVM unter Verwendung des CALLOpcodes verarbeitet.

Wenn Sie diesen Code in remix einfügen , dann eine Transaktion an senden B.getA()und sich den Debugger ansehen, können Sie dies in Aktion sehen.

pragma solidity ^0.4.10;

contract A {
    uint public value = 1;
}

contract B {
    A a = new A();

    function getA() returns(uint){
        return a.value();
    }
}

Aufruf-Opcode remixen