Was sind Anrufdaten?

Was sind Anrufdaten? Ich habe gelernt, dass es drei Arten von Erinnerungen gibt:

  1. Lagerung
  2. Erinnerung
  3. Stapel

In den Ethereum-Dokumenten heißt es, dass die Funktionsparameter standardmäßig vom Typ Speicher sind.

Allerdings habe ich auch einen Artikel gelesen, der besagte, dass Funktionsargumente in calldata gespeichert werden.

Nun, ich weiß nicht, was Anrufdaten sind, kann mir bitte jemand helfen?

Vielen Dank!

Einfacher ausgedrückt handelt es sich bei Calldata um die Daten, die im Rahmen des Aufrufs an den Smart Contract bereitgestellt werden. Wie @eth erklärt hat, handelt es sich um die Signatur der Funktion und die bereitgestellten Parameter.

Antworten (3)

Hier ist ein Beispiel aus Was ist ein ABI und warum wird es benötigt, um mit Verträgen zu interagieren?

contract Foo {
  function baz(uint32 x, bool y) returns (bool r) { r = x > 32 || y; }
}

baz()Wenn wir mit den Parametern 69und aufrufen wollten true, würden wir insgesamt 68 Bytes übergeben, die sich aufteilen lassen in:

0xcdcd77c0: die Methoden-ID. Dies wird als die ersten 4 Bytes des Keccak-256-Hashes der ASCII-Form der Signatur baz(uint32,bool) abgeleitet. 0x000000000000000000000000000000000000000000000000000000000045: Der erste Parameter, ein uint32-Wert 69, aufgefüllt auf 32 Byte. (69 ist hex 0x45.) 0x00000000000000000000000000000000000000000000000000000000000001: der zweite Parameter – boolesch wahr, auf 32 Bytes aufgefüllt

Die 68 Bytes sind die calldata: 0xcdcd77c000000000000000000000000000000000000000000000000000000000000000450000000000000000000000000000000000000000000000000000000000000001.

Ich möchte einen Kommentar für diejenigen hinterlassen, die wie ich zuerst verwirrt waren: Die aufgefüllten Werte könnten aufgrund Ihrer Bildschirmauflösung umgebrochen werden. Die Werte sind (wie erklärt) daher die Verkettung von 0xcdcd77c0 , 0x00 ... .0045 , 0x00........01

calldataHier werden Daten von externen Aufrufen von Funktionen gespeichert.

Funktionen können intern, zB aus dem Vertrag, oder extern aufgerufen werden. Wenn die Sichtbarkeit einer Funktion ist external, können nur externe Verträge diese Funktion aufrufen.

Wenn ein solcher externer Anruf stattfindet, werden die Daten dieses Anrufs in gespeichert calldata.

Lesen Sie auch hier: „externe“ vs. „öffentliche“ Best Practices

Externe Aufrufe von Funktionen! Ich muss wissen, dass wir eine Funktion aufrufen können, aber diese Terminologie verstehe ich nicht
Kannst du das bitte ein bisschen erklären
Ich habe die Antwort bearbeitet, um weitere Informationen aufzunehmen

Das Calldataist ein schreibgeschützter Byte-adressierbarer Raum, in dem der Datenparameter einer Transaktion oder eines Anrufs gehalten wird. Im Gegensatz zum Stapel müssen Sie zur Verwendung dieser Daten einen genauen Byte-Offset und die Anzahl der zu lesenden Bytes angeben. Die Opcodes im Zusammenhang mit den von EVM bereitgestellten Calldata sind:

• CALLDATASIZE gibt die Größe der Transaktionsdaten zurück

• CALLDATALOAD importiert 32 Byte Transaktionsdaten auf den Stack

• CALLDATACOPY kopiert Transaktionsdaten einer bestimmten Anzahl von Bytes in den Speicher

calldataverhält sich fast so memory. Es ist ein nicht modifizierbarer und temporärer Bereich, der zum Speichern von Funktionsargumenten verwendet werden kann. Da das Kopieren zwischen Speicher und Speicher recht teuer sein kann, kann die Angabe eines Speicherorts manchmal hilfreich sein, um den Gasverbrauch zu kontrollieren.