Normale Transaktionen VS. Interne Transaktionen in Etherscan

Auf Etherscan :

-->> accounts >> contract accounts >> selecting one contract,

Es gibt zwei Arten von Transaktionen, die unter Anzahl der Transaktionen erwähnt werden :

Normale Transaktionen und interne Transaktionen .

Was ist der Unterschied zwischen ihnen und warum sind die normalen Transaktionen normalerweise viel geringer als die internen Transaktionen?

Antworten (5)

Interne Transaktionen sind trotz des Namens (der nicht Teil des Yellowpapers ist; es ist eine Konvention, auf die sich die Leute geeinigt haben) keine tatsächlichen Transaktionen und werden nicht direkt in die Blockchain aufgenommen; sie sind Wertübertragungen, die durch die Ausführung eines Vertrages initiiert wurden.

Überprüfen Sie auch diese Antworten

  1. Die DAO-internen Transaktionen
  2. So erhalten Sie vertragsinterne Transaktionen
nicksmac: Werden interne Transaktionen die Events in die Logs gelegt? Sind sie das?
@ThomasJayRush ist esvalue transfers that were initiated by executing a contract.
@ThomasJayRush nein, das sind nur Anrufe von einem Vertrag zum anderen

Im Ethereum-Protokoll gibt es nur Transaktionen und Nachrichtenaufrufe. Eine Transaktion ist eine Art Nachrichtenaufruf.

Eine Transaktion kann andere Nachrichtenaufrufe ausführen, aber dies sind keine Transaktionen (auch wenn Blockchain-Explorer sie möglicherweise fälschlicherweise als „interne Transaktionen“ bezeichnen). Diese (internen) Nachrichtenaufrufe werden nicht auf der Blockchain veröffentlicht.

Zur Veranschaulichung sieht eine Transaktion in Javascript so aus:

{
  from: ...,
  to: "C1",
  value: ...,
  gas: ...,
  data: ...,
  gasPrice: ...,
  nonce: ...
}

Das sehen Sie auf der Blockchain: eine „normale Transaktion“. Eine „interne Transaktion“ ist die Auswirkung der Übernahme des dataTeils, der Eingabe todes Vertrags C1 und der Ausführung der Ethereum Virtual Machine. Das datasagt C1, dass es einen anderen Vertrag C2 aufrufen soll: Es gibt kein separates {from:C1, to:C2,...}Objekt in der Blockchain, das benötigt wird.


Verträge, die sich gegenseitig anrufen, zusammen mit dem Empfang von Zahlungen, sind der Grund, warum "normale Transaktionen normalerweise viel weniger sind als interne Transaktionen". Zum Beispiel wurden TheDAO-Token ursprünglich gekauft, indem eine Funktion auf TheDAO aufgerufen und ETH damit gesendet wurde.

Wenn Sie sagen "These (internal) message calls are not published on the blockchain", ist das nicht falsch, da alle Daten öffentlich und in einem Block enthalten sind, vorausgesetzt natürlich, die Transaktion wurde abgebaut?
@mecampbellsoup Die internen Nachrichtenaufrufe können abgeleitet werden, da zwar alle Blockchain-Daten öffentlich sind, aber Sie müssen auch die EVM ausführen, wie die Antwort erklärt. Sie werden nicht in dem Sinne "veröffentlicht", dass die meisten Clients keine "Suche" für sie bereitstellen.

Eine interne Transaktion ist keine echte Transaktion – sie hat keine Signatur und ist nicht in der Blockchain enthalten. Es ist das Ergebnis eines Vertrags, der eine Wertübertragung initiiert oder einen anderen Vertrag aufruft, typischerweise unter Verwendung des CALL-Opcodes.

"Ähnliche" Opcodes sind: CALL, CREATE, CREATE2, CALLCODE, DELEGATECALL, SELFDESTRUCT.

Die vollständige Liste der Opcodes lautet: CREATE, CALL, CALLCODE, DELEGATECALL, SELFDESCTUCT
Warum muss ein Vertrag einen anderen Vertrag für eine Wertübertragung aufrufen? Kann es die Wertübertragung nicht einfach in sich selbst vornehmen?

Eine Vertragsadresse hostet einen Smart Contract, bei dem es sich um eine Reihe von Codes handelt, die in der Blockchain gespeichert sind und ausgeführt werden, wenn eine Transaktion mit zugehörigen Eingabedaten (Vertragsinteraktion) an ihr vorgenommen wird. Quelle .


Wie @nick-johnson das Konzept in diesem Link schön demonstriert hat :

Interne Transaktionen sind trotz des Namens (der nicht Teil des Yellowpapers ist; es ist eine Konvention, auf die sich die Leute geeinigt haben) keine tatsächlichen Transaktionen und werden nicht direkt in die Blockchain aufgenommen; es handelt sich um Wertübertragungen, die durch die Ausführung eines Vertrages initiiert wurden .

Als solche werden sie nirgendwo explizit gespeichert: Sie sind die Auswirkungen der Ausführung der betreffenden Transaktion auf den Blockchain-Status. Blockchain-Explorer wie Etherscan erhalten sie, indem sie einen modifizierten Knoten mit einer instrumentierten EVM ausführen, die alle Wertübertragungen aufzeichnet, die im Rahmen der Transaktionsausführung stattgefunden haben, und sie separat speichert.

Weitere Informationen finden Sie unter diesem Link .


Um dies zu verstehen, sehen Sie sich das folgende Beispiel an :

Die EOA-Adresse A möchte einige ERC-20-Token an die EOA-Adresse C senden. Dazu sollte die EOA-Adresse A eine Überweisungstransaktion an die ERC-20-Vertragsadresse B mit diesen Parametern durchführen:

tx_obj = {
            'from'      : EOA_address_A,
            'to'        : ERC_20_Contract_address_B,
            'value'     : 0,
            'data'      : data,
            'gas'       : estimated_gas,
            'gasPrice'  : web3.eth.gas_price,
            'nonce'     : web3.eth.get_transaction_count(EOA_address_A),
            'chainId'   : web3.eth.chain_id
            }

worin

estimated_gas = self.w3.eth.estimate_gas({
            'from'      : EOA_address_A,
            'to'        : ERC_20_Contract_address_B,
            'value'     : 0,
            'data'      : data,
            'nonce'     : web3.eth.get_transaction_count(EOA_address_A),
            'chainId'   : web3.eth.chain_id
            })

und

data = contract_token.encodeABI(fn_name="transfer", args=[EOA_address_C, to_wei(amount, 'ether')])

worin

contract_token = web3.eth.contract(address=ERC_20_Contract_address_B, abi=ERC_20_Contract_address_B_abi)

In diesem Beispiel erkennt die EVM tx_obj als Transaktionsparameter: 0 Betrag von EOA_address_A bis ERC_20_Contract_address_B mit "data" als Daten. Dies wird als Transaktion bezeichnet.

Die sogenannte Interne Transaktion ist die Folge dieser Transaktion. dh mit dieser durchgeführten Transaktion wird durch Auslösen der Übertragungsfunktion in ERC_20_Contract_address_B und Weiterleiten der von dieser Transaktion bereitgestellten "Daten" die Übertragungsfunktion von ERC_20_Contract_address_B ausgeführt und Token werden an EOA_address_C übertragen.

Aufgrund der Tatsache, dass das Ausführen dieser Funktion den Blockchain-Status nicht ändert (trotz der Haupttransaktion), erkennt die EVM dies nicht als Transaktion und die Leute nennen dies herkömmlicherweise eine interne Transaktion. Blockchain-Explorer wie Etherscan erhalten sie jedoch, indem sie einen modifizierten Knoten mit einer instrumentierten EVM ausführen, die alle Wertübertragungen aufzeichnet, die im Rahmen der Transaktionsausführung stattgefunden haben, und sie separat speichert.

Interne Transaktionen sind ETH-Transfers von Smart Contracts, hier gibt es eine gute Erklärung zu den verschiedenen Arten von Transfers: https://docs.alchemyapi.io/alchemy/guides/using-webhooks#address-activity

Außerdem können Sie jetzt Benachrichtigungen für interne Transaktionen mit Alchemy https://blog.alchemyapi.io/blog/internal-transactions-notifications erhalten

Willkommen beim Ethereum Stack Exchange! Einige von Ihnen von Alchemy haben doppelte Antworten gepostet, ohne die Frage genauer zu beantworten. Einige der doppelten Antworten, die die Frage nicht beantworten, wurden gelöscht. Einige Fragen können eine Gelegenheit sein, zu demonstrieren, wie Alchemy tatsächlich hilft oder die gestellte Frage löst.