Was ist der Unterschied zwischen kostenpflichtiger Funktion und nicht kostenpflichtiger Funktion im Bytecode für Solidität?

Angenommen, ich habe zwei Solidity-Funktionen:

function funcA()public{}

Und

function funcB()public payable{}

Was ist der Unterschied zwischen ihrem Bytecode? Wenn ich die funcA mit etwas Ether in der Transaktion aufrufe, wird sie zurückgesetzt, und was passiert im Bytecode?

Können Sie Ihre Frage bitte präzisieren? Versuchen Sie, kostenpflichtige und nicht kostenpflichtige Funktionen anhand des Bytecodes zu erkennen?
ja, das ist was ich will

Antworten (1)

Zu Beginn wird eine nicht zahlbare Funktion ausgeführt CALLVALUEund zurückgesetzt, wenn sie einen Wert ungleich Null zurückgibt.

Zum Beispiel:

Assembly                 | Pseudocode
---------------------------------------------
  CALLVALUE              |
  DUP1                   |
  ISZERO                 |  if (msg.value == 0)
  PUSH2 label            |
  JUMPI                  |    goto label
  PUSH1 00               |
  DUP1                   |
  REVERT                 |  revert("")