Gebühren für Transaktionen auf der Ethereum-Blockchain Gas – der Preis für Smart Contracts
Anbieter zum Thema
Transaktionen für einen Funktionsaufruf von Smart Contracts sind mit der Recheneinheit „Gas“ zu bezahlen. Je komplexer und rechenintensiver Smart Contracts sind, umso mehr Kosten entstehen. Wie lassen sich Gas Fees reduzieren?

Gas ist die Maßeinheit für den Rechenaufwand, der erforderlich ist, um bestimmte Operationen im Ethereum-Netzwerk auszuführen. Da jede Ethereum-Transaktion die Verwendung von Rechenressourcen erfordert, ist für jede Transaktion eine Gebühr erforderlich. Die für den Abschluss einer Ethereum-Transaktion erforderliche Gebühr wird als Gas bezeichnet.
Die Gas-Gebühren von Ethereum geben den Usern seit Langem Anlass zur Sorge. Selbst als Ethereum den Konsens-Mechanismus Proof-of-Stake als ein energieeffizienteres System einführte, gab es kaum Auswirkungen auf die Gas Fees. Um hohe Standards aufrechtzuerhalten, Risiken zu minimieren, sauberen Code zu schreiben und sichere, kostengünstige Smart Contracts zu erstellen, ist es wichtig, die Techniken zur Optimierung von Gas zu kennen.
Transaktionen und Rechenbedarf
Im Zuge der Kompilierung eines Smart Contracts in Solidity wird er in eine Reihe von „Operations-Codes“ (Opcodes) umgewandelt. Jedem Opcode wird eine vordefinierte Gasmenge zugewiesen, die der Rechenarbeit entspricht, die notwendig ist, um diese spezifische Operation auszuführen.
Opcodes und Bytecodes sind ähnlich. Bytecodes verwenden jedoch für die Darstellung hexadezimale Ganzzahlen. Bytecodes werden von der Ethereum Virtual Machine (EVM) ausgeführt, einer Software, die Smart Contracts ausführt und auf den Ethereum-Knoten- bzw. Netzwerkschichten sitzt.
Das Ziel der Optimierung besteht darin, die Gesamtzahl der Vorgänge zu reduzieren, die für die Ausführung eines Smart Contracts erforderlich sind; wobei optimierte Smart Contracts nicht nur den Gasverbrauch für die Verarbeitung von Transaktionen reduzieren, sondern auch vor böswilligem Missbrauch schützen.
Bestimmung des Gas-Verbrauchs
Die Schätzung, wie viel Gas ein Smart Contract verbrauchen wird, ist oftmals recht schwierig. Der Gas-Preis wird auf der Grundlage vieler verschiedener Faktoren bestimmt, darunter Angebot, Nachfrage sowie schwankende Preise für Kryptowährungen. Daher ist es besonders wichtig, Smart Contracts zielführend zu optimieren, um den Gasverbrauch überhaupt reduzieren zu können.
Viele IT-Experten für Smart Contracts verwenden verschiedene Tools zur Bestimmung des Gas-Verbrauchs, um zu vermeiden, dass Gas zu wenig oder zu viel bezahlt wird. Diese Schätzungen sind jedoch nicht immer ganz genau, da wie bereits benannt, viele unterschiedliche Faktoren die Kosten beeinflussen können. Beispielsweise erschweren unterschiedliche Blockgrößen, Blockzeiten, Blocklaufzeiten oder Vergleiche zu den letzten Blöcken eine genaue Schätzung der möglichen minimalen Gas-Gebühr für den jeweils folgenden Block.
So bieten Tools wie beispielsweise der Gas-Profiler einen detaillierten Überblick darüber, wie viel Gas eine Transaktion verbraucht, wenn sie on-chain oder off-chain läuft. Hierzu verwendet die Funktion Diagramme als visuelle Darstellung des Gas-Verbrauchs über die gesamte Transaktion hinweg. Anschließend kann der Verbrauch auf einzelne Funktionsaufrufe heruntergebrochen werden, woraus sich schließen lässt, welche Teile des Codes am meisten Gas für die Ausführung verbraucht hat.
Optimierungstechniken für Gas-Gebühren
Bei der Optimierung von Smart Contracts ist es wichtig, Bereiche des Codes zu identifizieren, die wahrscheinlich die größten Renditen (in Bezug auf eingespartes Gas) erzielen. In der Folge sind ein paar wesentliche Beispiele für Möglichkeiten der Reduktion des Gas-Verbrauchs skizziert:
Optimierung der Speichernutzung
Die Transaktionen, die auf Ethereum am meisten Gas verbrauchen, beinhalten typischerweise das Speichern und Abrufen von Daten, die über Transaktionen und Blöcke hinweg bestehen bleiben müssen. Die Anzahl der Speicherplätze und die Art und Weise, wie Daten in einem Smart Contract dargestellt werden, wirkt sich stark auf den Gas-Verbrauch aus.
Als Beispiel sei hier die Begrenzung der Speichernutzung angeführt. Speicherplätze sind idealerweise nur für wesentliche Daten zu verwenden. Speicher-Änderungen lassen sich verhindern, indem Zwischenergebnisse im Speicher oder auf einem Stack gespeichert werden.
Verbesserung der Betriebsabläufe
Nicht alle Implementierungen einer Lösung sind in Bezug auf den Gas-Verbrauch gleich effizient. Die Art und Weise, wie ein Funktionsaufruf oder ein komplexer logischer Ausdruck implementiert wird, kann zur verbrauchten Menge beitragen. Hier sind einige Fälle, in denen eine optimalere Lösung den Verbrauch an Gas reduzieren kann:
Interne Funktionsaufrufe verwenden
Der Aufruf einer öffentlichen Funktion dauert wesentlich länger als der Aufruf einer internen, da alle Parameter ins Memory kopiert werden.
Weniger Funktionen
Beschränkung der Anzahl interner und privater Funktionen auf ein Minimum, um die Komplexität und Menge der Funktionen auszugleichen.
Vereinfachung von Ausrücken
Bei logischen Ausdrücken sollten die komplexen so weit wie möglich vereinfacht werden. Sie sind so zu verfassen, dass die Wahrscheinlichkeit einer unnötigen Auswertung des zweiten Ausdrucks minimiert wird.
Begrenzung von Modifikatoren
Der Code von Modifikatoren wird in eine modifizierte Funktion eingefügt, die ihre Größe und ihren Gas-Verbrauch erhöht. Um dies zu vermeiden, sind die Anzahl der Modifikatoren zu verringern.
Einzelner Zeilentausch
In einer Anweisung lassen sich die Werte zweier Variablen austauschen. Beispiel: (a, b) = (b, a) anstatt eine Hilfsvariable zum Austauschen zu verwenden.
Allgemeine Empfehlungen
Neben der Implementierung einiger spezifischer Lösungen empfiehlt es sich, einige Praktiken zu vermeiden, die zu höheren Gebühren beitragen können:
- Minimierung des direkten Zugriffs auf Speichervariablen.
- Vermeidung von Schleifen.
- Unnötige Berechnungen eliminieren.
- Effizientere und geeignetere Strukturen zur Darstellung der Daten finden.
- Weniger energieintensive Lösungen verwenden.
(ID:49044348)