Marktkapitalisierung: $2.2026T 0.80%
Volumen (24h): $38.3583B -35.30%
Angst- und Gier-Index:

36 - Furcht

  • Marktkapitalisierung: $2.2026T 0.80%
  • Volumen (24h): $38.3583B -35.30%
  • Angst- und Gier-Index:
  • Marktkapitalisierung: $2.2026T 0.80%
Kryptos
Themen
Cryptospedia
Nachricht
Cryptostopics
Videos
Top Cryptospedia

Sprache auswählen

Sprache auswählen

Währung wählen

Kryptos
Themen
Cryptospedia
Nachricht
Cryptostopics
Videos

Wie schreibe ich einen gaseffizienten Smart Contract in Solidität?

Optimize Solidity gas usage by grouping same-type storage vars, caching array lengths, using unchecked only when safe, reverting with custom errors, and enabling solc’s --via-ir flag.

Jan 26, 2026 at 01:59 pm

Optimieren Sie das Speicherlayout

1. Gruppieren Sie Variablen desselben Typs, um die Slot-Nutzung zu minimieren. 2. Verwenden Sie uint256 anstelle kleinerer Typen, es sei denn, das Packen ist beabsichtigt. 3. Deklarieren Sie Zustandsvariablen in der Reihenfolge abnehmender Größe: uint256 , uint128 , uint64 , uint32 , uint16 , uint8 . 4. Vermeiden Sie die Verwendung von Mapping für große Datensätze, wenn Alternativen wie Arrays mit Off-Chain-Indizierung vorhanden sind. 5. Bevorzugen Sie unveränderliche Werte gegenüber konstanten Werten, die zum Zeitpunkt der Bereitstellung bekannt sind, aber dynamisch berechnet werden.

Minimieren Sie externe Anrufe und Schleifen

1. Externe Aufrufe verbrauchen deutlich mehr Gas als interne Funktionsaufrufe; Konsolidieren Sie die Logik nach Möglichkeit in einer einzigen Transaktion. 2. Iterieren Sie niemals über unbegrenzte Arrays innerhalb von On-Chain-Funktionen – verwenden Sie ereignisbasierte Paginierung oder Off-Chain-Berechnung. 3. Ersetzen Sie for (uint i = 0; i < array.length; i++) durch Schleifen mit fester Länge, wenn die Länge vorhersehbar ist. 4. Array-Länge vor der Schleife im Speicher zwischenspeichern: uint len ​​= array.length; 5. Vermeiden Sie verschachtelte Schleifen vollständig, es sei denn, beide Dimensionen sind streng begrenzt und klein.

Nutzen Sie Assembly für kritische Pfade

1. Inline-Assembly kann die Sicherheitsprüfungen von Solidity umgehen und den Aufwand für Arithmetik und Speicherzugriff reduzieren. 2. Verwenden Sie mstore und mload anstelle von Speicherzuweisungen auf hoher Ebene, wenn die Leistung entscheidend ist. 3. Ersetzen Sie keccak256(abi.encodePacked(...)) durch keccak256(bytes) , wenn Sie vorgefertigte Bytesequenzen hashen. 4. Greifen Sie nur dann direkt über Sload und Store auf Speicherslots zu, wenn Sie sich über Slot-Indizes und Veränderbarkeit sicher sind. 5. Verwenden Sie Assembly niemals für komplexe Kontrollflüsse – sorgen Sie für Lesbarkeit und Überprüfbarkeit der Kerngeschäftslogik.

Vermeiden Sie teure Operationen auf heißen Wegen

1. Divisions- und Modulo-Operationen kosten mehr Gas als Bitverschiebungen; Verwenden Sie x >> n anstelle von x / 2**n, wenn Sie durch Zweierpotenzen dividieren. 2. Die String-Verkettung mit abi.encodePacked ist günstiger als string.concat , aber beide sollten in häufig aufgerufenen Funktionen vermieden werden. 3. Geben Sie keine Ereignisse innerhalb von Schleifen aus, es sei denn, jede Emission enthält eindeutige, notwendige Daten. 4. Mit benutzerdefinierten Fehlern anstelle von Zeichenfolgenmeldungen zurückkehren: revert InvalidAmount(); Spart ca. 2000 Benzin pro Anruf. 5. Verwenden Sie ungeprüfte Blöcke nur, wenn ein Überlauf/Unterlauf mathematisch unmöglich ist – niemals in der Arithmetik mit Benutzereingaben.

Prüf- und Messpraktiken

1. Messen Sie den Gasverbrauch mit dem gasReporter von Hardhat oder dem forge test --gas-report von Foundry. 2. Vergleichen Sie die Basisgaskosten vor und nach jeder Optimierung, um vorzeitige Mikrooptimierungen zu vermeiden. 3. Simulieren Sie Worst-Case-Szenarien: vollständige Arrays, maximale Rekursionstiefe, Edge-Case-Eingaben. 4. Profilieren Sie Speicherlese-/schreibvorgänge separat mithilfe von EVM-Trace-Analysetools wie Tenderly oder Blockscout. 5. Überwachen Sie die Bytecode-Ausgabe mit solc --asm, um Compiler-Optimierungen wie konstante Faltung und Eliminierung von totem Code zu überprüfen.

Häufig gestellte Fragen

Q1. Reduziert die Verwendung von View- oder Pure -Funktionen den Gasverbrauch? A1. Nein. Diese Modifikatoren wirken sich auf das Anrufverhalten und die Zustandsveränderlichkeit aus, ändern jedoch nicht die Gaskosten bei externen Anrufen. Sie eliminieren die Gasgebühren nur, wenn sie intern oder außerhalb der Kette aufgerufen werden.

Q2. Ist es sicherer, SafeMath in modernen Solidity-Versionen zu verwenden? A2. Nicht erforderlich. Solidity 0.8.0+ enthält integrierte Überlaufprüfungen. Explizites SafeMath fügt unnötige Opcodes hinzu und erhöht die Bereitstellungsgeschwindigkeit.

Q3. Kann ich Gas reduzieren, indem ich Verträge mit entferntem Bytecode bereitstelle? A3. Ja. Die Verwendung des Flags --via-ir mit solc ermöglicht erweiterte Optimierungsdurchgänge, wodurch die Bytecodegröße zur Laufzeit häufig um 15–30 % reduziert und der Bereitstellungsaufwand erheblich gesenkt wird.

Q4. Warum kostet die Aussendung eines Ereignisses mit indizierten Parametern mehr Gas? A4. Indizierte Parameter generieren Themen-Hashes, die im Themen-Array des Protokolls gespeichert werden, was zusätzliche SHA3- Berechnungen und Speicherung in der Protokollstruktur erfordert – jedes Thema verbraucht ein 32-Byte-Wort.

Haftungsausschluss:info@kdj.com

Die bereitgestellten Informationen stellen keine Handelsberatung dar. kdj.com übernimmt keine Verantwortung für Investitionen, die auf der Grundlage der in diesem Artikel bereitgestellten Informationen getätigt werden. Kryptowährungen sind sehr volatil und es wird dringend empfohlen, nach gründlicher Recherche mit Vorsicht zu investieren!

Wenn Sie glauben, dass der auf dieser Website verwendete Inhalt Ihr Urheberrecht verletzt, kontaktieren Sie uns bitte umgehend (info@kdj.com) und wir werden ihn umgehend löschen.

Verwandtes Wissen

Alle Artikel ansehen

User not found or password invalid

Your input is correct