Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03524.jsonl.gz/746

2. Zweitens wird die angegebene Adresse des neuen Vertrags auf der Grundlage der Eingabedaten der Transaktion (vor)berechnet. In dieser Phase werden die Eingabestatuswerte geändert, aber der Status des neuen Vertrags ist noch leer. Im Gegensatz zu externen Konten können Vertragskonten keine neuen Transaktionen eigenständig initiieren. Stattdessen können Vertragskonten Transaktionen nur als Reaktion auf andere Transaktionen ausgelöst, die sie erhalten haben (von einem externen Konto oder von einem anderen Vertragskonto). Weitere Informationen zu Vertragsgesprächen finden Sie im Abschnitt „Transaktionen und Nachrichten“. Der zweite Speicherbereich wird Speicher genannt, von dem ein Vertrag eine neu gelöschte Instanz für jeden Nachrichtenaufruf erhält. Der Speicher ist linear und kann auf Byte-Ebene adressiert werden, aber Lesevorgänge sind auf eine Breite von 256 Bit beschränkt, während Schreibvorgänge entweder 8 Bit oder 256 Bit breit sein können. Der Speicher wird durch ein Wort (256-Bit) erweitert, wenn man auf ein zuvor unberührtes Speicherwort (d. h.
einen beliebigen Offset innerhalb eines Wortes) zugreift (entweder lesen oder schreiben). Zum Zeitpunkt der Expansion müssen die Kosten für Gas bezahlt werden. Speicher ist teurer, je größer es wächst (es skaliert quadratisch). Implizite Schnittstellen sind ein leistungsstarkes Tool in Dart, um zu vermeiden, dass der Vertrag einer Klasse wiederholt werden muss, wenn er aus den Signaturen einer Implementierung dieses Vertrags trivial abgeleitet werden kann. Daher wird dringend empfohlen, die Verwendung von Selfdestruct oder Delegatecall in Ihren Verträgen zu vermeiden. Wenn Sie sie einschließen müssen, stellen Sie absolut sicher, dass sie von einem Angreifer in einem nicht initialisierten Logikvertrag nicht aufgerufen werden können. Beachten Sie, dass diese Einschränkung nicht nur Ihre Verträge betrifft, sondern auch die Verträge, die Sie aus einer Bibliothek importieren. Betrachten Sie z. B.
ERC20 von OpenZeppelin Contracts: Der Vertrag initialisiert den Namen, das Symbol und die Dezimalstellen des Tokens in seinem Konstruktor. Nachdem wir nun die Grundlagen der Transaktionsausführung behandelt haben, sehen wir uns einige der Unterschiede zwischen vertragsbildenden Transaktionen und Nachrichtenaufrufen an. Verträge können sogar andere Verträge mit einem speziellen Opcode erstellen (d.h. sie nennen nicht einfach die Nulladresse). Der einzige Unterschied zwischen diesen Erstellen von Anrufen und normalen Nachrichtenaufrufen besteht darin, dass die Nutzdaten ausgeführt werden und das Ergebnis als Code gespeichert wird und der Aufrufer/Ersteller die Adresse des neuen Vertrags auf dem Stapel empfängt. Ein wichtiger Aspekt der Funktionsweise des Ethereum ist, dass jeder einzelne Vorgang, der vom Netzwerk ausgeführt wird, gleichzeitig von jedem vollständigen Knoten ausgeführt wird. Rechenschritte auf der virtuellen Ethereum-Maschine sind jedoch sehr teuer. Daher eignen sich Ethereum Smart Contracts am besten für einfache Aufgaben, wie z.
B. das Ausführen einfacher Geschäftslogik oder das Überprüfen von Signaturen und anderen kryptografischen Objekten, anstatt komplexere Verwendungen wie Dateispeicherung, E-Mail oder maschinelles Lernen, die das Netzwerk belasten können.