Gebühren für Transaktionen auf der Ethereum-Blockchain Gas – der Preis für Smart Contracts

Von Dipl. Betriebswirt Otto Geißler 4 min Lesedauer

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?

Die Minimierung der Speichernutzung von Smart Contracts kann zu massiven Einsparungen führen.
Die Minimierung der Speichernutzung von Smart Contracts kann zu massiven Einsparungen führen.

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:

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

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)